Foros del Web » Programando para Internet » PHP »

Seguridad en PHP [Importante];

Estas en el tema de Seguridad en PHP [Importante]; en el foro de PHP en Foros del Web. Muéstrame lo que tienes en seguridad.php Un saludo...

  #31 (permalink)  
Antiguo 13/05/2010, 02:36
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: Seguridad en PHP [Importante];

Muéstrame lo que tienes en seguridad.php


Un saludo
  #32 (permalink)  
Antiguo 13/05/2010, 02:42
Avatar de Flow89  
Fecha de Ingreso: abril-2010
Ubicación: Valladolid
Mensajes: 346
Antigüedad: 14 años
Puntos: 1
Respuesta: Seguridad en PHP [Importante];

Cita:
Iniciado por Heli0s Ver Mensaje
Muéstrame lo que tienes en seguridad.php


Un saludo
Código PHP:
<?php
function getClearString($var){
    if(!
is_array($var)){
        return 
addslashes(stripslashes(htmlentities($var)));
    } else {
        return 
$var;
    }
}

$_GET array_map("getClearString"$_GET);
$_POST array_map("getClearString"$_POST);
$_COOKIE array_map("getClearString"$_COOKIE);
$_SESSION array_map("getClearString"$_SESSION); 
?>
  #33 (permalink)  
Antiguo 13/05/2010, 02:44
Avatar de Flow89  
Fecha de Ingreso: abril-2010
Ubicación: Valladolid
Mensajes: 346
Antigüedad: 14 años
Puntos: 1
Respuesta: Seguridad en PHP [Importante];

Por cierto, probandolo ne otra pagina me pone este error

Código:
Warning: array_map() [function.array-map]: Argument 
#2 should be an array in /home/a7366460/public_html/seguridad.php 
 on line 13
Y probé quitando el <?php del archivo de seguridad y me muestra esto (en administracion.php q es el que te mostre antes).

Código:
Warning: array_map() [function.array-map]: Argument #2 
should be an array in /home/a7366460/public_html/loginpanel/seguridad.php  
on line 13

Fatal error: Cannot redeclare getclearstring() (previously declared in 
/home/a7366460/public_html/loginpanel/seguridad.php:2) in 
/home/a7366460/public_html/loginpanel/seguridad.php on line 8
  #34 (permalink)  
Antiguo 13/05/2010, 03:01
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: Seguridad en PHP [Importante];

Pero si quitas el <?php no debería procesarlo como PHP, tienes varios <?PHP?

Ahora ya no se muestra en pantalla? da esos errores solo o tambien se muestra en pantalla?
  #35 (permalink)  
Antiguo 13/05/2010, 03:04
Avatar de Flow89  
Fecha de Ingreso: abril-2010
Ubicación: Valladolid
Mensajes: 346
Antigüedad: 14 años
Puntos: 1
Respuesta: Seguridad en PHP [Importante];

Cita:
Iniciado por Heli0s Ver Mensaje
Pero si quitas el <?php no debería procesarlo como PHP, tienes varios <?PHP?

Ahora ya no se muestra en pantalla? da esos errores solo o también se muestra en pantalla?

El código de administración.php te lo puse mas arriba, en seguridad.php solo tengo 1 <?php ?>

La cosa era al revés, si quito el PHP me sale el texto, si lo pongo, me salen esos errores.
  #36 (permalink)  
Antiguo 13/05/2010, 03:12
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: Seguridad en PHP [Importante];

Se me olvidaba una cosa, que como mínimo te quitará un error, tu no usas sessiones, y si no haces un session_start() el array $_SESSION no existe, por lo tanto voy a realizar unos cambios para que detecte.

Código PHP:
<?php
function getClearString($var){
    if(!
is_array($var)){
        return 
addslashes(stripslashes(htmlentities($var)));
    } else {
        return 
$var;
    }
}
if(
is_array($_GET))
$_GET array_map("getClearString"$_GET);
if(
is_array($_POST))
$_POST array_map("getClearString"$_POST);
if(
is_array($_COOKIE))
$_COOKIE array_map("getClearString"$_COOKIE);
if(
is_array($_SESSION))
$_SESSION array_map("getClearString"$_SESSION);

?>
Este es el nuevo código para que no de error aunque no haya un session_start antes.

Un saludo
  #37 (permalink)  
Antiguo 13/05/2010, 04:00
Avatar de Flow89  
Fecha de Ingreso: abril-2010
Ubicación: Valladolid
Mensajes: 346
Antigüedad: 14 años
Puntos: 1
Respuesta: Seguridad en PHP [Importante];

Cita:
Iniciado por Heli0s Ver Mensaje
Se me olvidaba una cosa, que como mínimo te quitará un error, tu no usas sessiones, y si no haces un session_start() el array $_SESSION no existe, por lo tanto voy a realizar unos cambios para que detecte.

Código PHP:
<?php
function getClearString($var){
    if(!
is_array($var)){
        return 
addslashes(stripslashes(htmlentities($var)));
    } else {
        return 
$var;
    }
}
if(
is_array($_GET))
$_GET array_map("getClearString"$_GET);
if(
is_array($_POST))
$_POST array_map("getClearString"$_POST);
if(
is_array($_COOKIE))
$_COOKIE array_map("getClearString"$_COOKIE);
if(
is_array($_SESSION))
$_SESSION array_map("getClearString"$_SESSION);

?>
Este es el nuevo código para que no de error aunque no haya un session_start antes.

Un saludo
Código:
Fatal error: Cannot redeclare getclearstring() (previously declared in 
/home/a7366460/public_html/loginpanel/seguridad.php:2) 
in /home/a7366460/public_html/loginpanel/seguridad.php on line 8
  #38 (permalink)  
Antiguo 13/05/2010, 04:19
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: Seguridad en PHP [Importante];

No entiendo ese error, dice que la función se declara dos veces, incluyes el archivo dos veces o algo por estilo? puede que incluyas un archivo que a su misma vez incluya seguridad.php, es muy raro ese error, y desde luego a mi no me sale.

Un saludo
  #39 (permalink)  
Antiguo 13/05/2010, 04:22
Avatar de Flow89  
Fecha de Ingreso: abril-2010
Ubicación: Valladolid
Mensajes: 346
Antigüedad: 14 años
Puntos: 1
Respuesta: Seguridad en PHP [Importante];

Cita:
Iniciado por Heli0s Ver Mensaje
No entiendo ese error, dice que la función se declara dos veces, incluyes el archivo dos veces o algo por estilo? puede que incluyas un archivo que a su misma vez incluya seguridad.php, es muy raro ese error, y desde luego a mi no me sale.

Un saludo
Que va.. le incluyo una sola vez, en cada página eso si.

si no lo conseguimos arreglar pues.. tendre que prescindir de el :S jeje
  #40 (permalink)  
Antiguo 13/05/2010, 04:30
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: Seguridad en PHP [Importante];

Una cosa que no entiendo es que en el error te ponga el nombre de la función en minusculas, cuando tiene mayusculas, yo borraría el archivo y lo crearía de nuevo, ya que el error por lo menos no es muy comun... si sigue fallando pasame el código de los otros archivos que incluyes, y prueba poniendo include_once, a ver si así funciona

Un saludo
  #41 (permalink)  
Antiguo 13/05/2010, 04:48
Avatar de Flow89  
Fecha de Ingreso: abril-2010
Ubicación: Valladolid
Mensajes: 346
Antigüedad: 14 años
Puntos: 1
Respuesta: Seguridad en PHP [Importante];

Ya se porque me tira ese error.

Habia incluido el segu.php en login.php y en administracion.php y a su vez estaba incluyendo el login.php en administracion.php

En este caso, como el segu.php esta dentro de login.php al ejecutar login.php en administracion.php tmb se ejecuta el segu.php en administracion.php?

No se si me entiendes, con tanto nombre.. jajaja XD

En definitiva que si el segu.php se ejecuta en login y administracion o solo en login? xd
  #42 (permalink)  
Antiguo 13/05/2010, 05:08
Avatar de Flow89  
Fecha de Ingreso: abril-2010
Ubicación: Valladolid
Mensajes: 346
Antigüedad: 14 años
Puntos: 1
Respuesta: Seguridad en PHP [Importante];

Sigamos con el tema de seguridad, ahora con el archivo ingresar.php

tenia este codigo;
Código PHP:
 <html>
<head>
<title>JuventudMDC - Panel de Administraci&oacute;n</title>
<link href="../css/general.css" rel="stylesheet" type="text/css" />
</head>
<body>
<?php
   
include("conex.php");
   include(
"segu.php");


function 
quitar($mensaje)
   {
   
$mensaje str_replace("<","&lt;",$mensaje);
   
$mensaje str_replace(">","&gt;",$mensaje);
   
$mensaje str_replace("\'","'",$mensaje);
   
$mensaje str_replace('\"',"&quot;",$mensaje);
  
$mensaje str_replace("\\\\","\\",$mensaje);
  return 
$mensaje;
   }
  
  if(
trim($HTTP_POST_VARS["nick"]) != "" && trim($HTTP_POST_VARS["password"]) != "")
  {
  
$nickN quitar($HTTP_POST_VARS["nick"]);
  
$passN quitar($HTTP_POST_VARS["password"]);
  
$result mysql_query("SELECT password FROM usuarios WHERE nick='$nickN'");
  if(
$row mysql_fetch_array($result))
   {
  if(
$row["password"] == $passN)
  {
  
//La cookie dura 1 hora
  
setcookie("usNick",$nickN,time()+36000);
  
setcookie("usPass",$passN,time()+36000);
  echo 
"<table style=\"height:100%;width:100%;\" border=\"0\"><tr><td class=\"estilo34\"><div align=\"center\">Logueado correctamente, ahora sera dirigido a el panel de administración automaticamente.</div></td></tr></table>";
  echo 
"<META HTTP-EQUIV=\"refresh\" CONTENT=\"2; url=administracion.php\">";
  }
  else
  {
  echo 
"<META HTTP-EQUIV=\"refresh\" CONTENT=\"2; url=../panel.php\">";
  echo 
"<table style=\"height:100%;width:100%;\"border=\"0\"><tr><td class=\"estilo34\"><div align=\"center\"><br>Contraseña incorrecta. <br> Seras redireccionado automaticamente.</div></td></tr></table>";
  }
  }
  else
  {
  echo 
"<META HTTP-EQUIV=\"refresh\" CONTENT=\"2; url=../panel.php\">";
  echo 
"<table style=\"height:100%;width:100%;\"border=\"0\"><tr><td class=\"estilo34\"><div align=\"center\"><br>Ese Usuario no existe en la base de datos. <br> Seras redireccionado automaticamente.</div></td></tr></table>";
  }
  
mysql_free_result($result);
  }
  else
  {
  echo 
"<META HTTP-EQUIV=\"refresh\" CONTENT=\"2; url=../panel.php\">";
  echo 
"<table style=\"height:100%;width:100%;\"border=\"0\"><tr><td class=\"estilo34\"><div align=\"center\"><br>Debe especificar un nick y password. <br> Seras redireccionado automaticamente.</div></td></tr></table>";
  }
  
mysql_close();  
  
?> 
</body>
</html>

Que se ha convertido en este otro Este es el q hay que revisar, el otro funciona bien
Código PHP:
<html>
<head>
<title>JuventudMDC - Panel de Administraci&oacute;n</title>
<link href="../css/general.css" rel="stylesheet" type="text/css" />
</head>
<body>
<?php
   
include("conex.php");
   include(
"segu.php");

$nick mysql_real_escape_string($HTTP_POST_VARS["nick"]);
$password mysql_real_escape_string($HTTP_POST_VARS["nick"]);

function 
quitar($mensaje)
   {
   
$mensaje str_replace("<","&lt;",$mensaje);
   
$mensaje str_replace(">","&gt;",$mensaje);
   
$mensaje str_replace("\'","'",$mensaje);
   
$mensaje str_replace('\"',"&quot;",$mensaje);
  
$mensaje str_replace("\\\\","\\",$mensaje);
  return 
$mensaje;
   }
  
  if(
trim("$nick") != "" && trim("$password") != "")
  {
$nickN my_real_escape_string($nickN);
$passN my_real_escape_string($passN);
  
$nickN quitar("$nick");
  
$passN quitar("$password");


  
$result mysql_query("SELECT password FROM usuarios WHERE nick='$nickN'");
  if(
$row mysql_fetch_array($result))
   {
  if(
$row["password"] == $passN)
  {
  
//La cookie dura 1 hora
  
setcookie("usNick",$nickN,time()+36000);
  
setcookie("usPass",$passN,time()+36000);
  echo 
"<table style=\"height:100%;width:100%;\" border=\"0\"><tr><td class=\"estilo34\"><div align=\"center\">Logueado correctamente, ahora sera dirigido a el panel de administración automaticamente.</div></td></tr></table>";
  echo 
"<META HTTP-EQUIV=\"refresh\" CONTENT=\"2; url=administracion.php\">";
  }
  else
  {
  echo 
"<META HTTP-EQUIV=\"refresh\" CONTENT=\"2; url=../panel.php\">";
  echo 
"<table style=\"height:100%;width:100%;\"border=\"0\"><tr><td class=\"estilo34\"><div align=\"center\"><br>Contraseña incorrecta. <br> Seras redireccionado automaticamente.</div></td></tr></table>";
  }
  }
  else
  {
  echo 
"<META HTTP-EQUIV=\"refresh\" CONTENT=\"2; url=../panel.php\">";
  echo 
"<table style=\"height:100%;width:100%;\"border=\"0\"><tr><td class=\"estilo34\"><div align=\"center\"><br>Ese Usuario no existe en la base de datos. <br> Seras redireccionado automaticamente.</div></td></tr></table>";
  }
  
mysql_free_result($result);
  }
  else
  {
  echo 
"<META HTTP-EQUIV=\"refresh\" CONTENT=\"2; url=../panel.php\">";
  echo 
"<table style=\"height:100%;width:100%;\"border=\"0\"><tr><td class=\"estilo34\"><div align=\"center\"><br>Debe especificar un nick y password. <br> Seras redireccionado automaticamente.</div></td></tr></table>";
  }
  
mysql_close();  
  
?> 
</body>
</html>

El caso es que, a raiz de poner el mysql_real_escape_string, debe modificar algo internamente y me dice que la contraseña es incorrecta. :S

Debería quitarlo? con el str_replace sería suficiente en este caso?

Como podría modificar el str_replace por el htmlentities? no entiendo muy bien como se usa.


Un saludo y Gracias
  #43 (permalink)  
Antiguo 13/05/2010, 05:13
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: Seguridad en PHP [Importante];

Cita:
Iniciado por Flow89 Ver Mensaje
Ya se porque me tira ese error.

Habia incluido el segu.php en login.php y en administracion.php y a su vez estaba incluyendo el login.php en administracion.php

En este caso, como el segu.php esta dentro de login.php al ejecutar login.php en administracion.php tmb se ejecuta el segu.php en administracion.php?

No se si me entiendes, con tanto nombre.. jajaja XD

En definitiva que si el segu.php se ejecuta en login y administracion o solo en login? xd
Sobre esto, es lo que te dije antes de incluir un archivo que al mismo tiempo incluye otro archivo. hay que llevar cuidado
  #44 (permalink)  
Antiguo 13/05/2010, 05:16
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: Seguridad en PHP [Importante];

Que caracteres tiene la contraseña? la cuestion es que a la hora de registrar un usuario tambien tendría que haber sido pasada la contraseña por mysql_real_escape_string, pero como cuando lo registrastes no usabas esa funcion, ahora la contraseña la detecta como diferente, pero si lo pones en el formulario de registrar y registras un usuario nuevo debería ir a la perfeccion.

Sobre htmlentities.

Código PHP:
$string htmlentities($stringaconvertir); 
Más sencillo imposible.
  #45 (permalink)  
Antiguo 13/05/2010, 05:24
Avatar de Flow89  
Fecha de Ingreso: abril-2010
Ubicación: Valladolid
Mensajes: 346
Antigüedad: 14 años
Puntos: 1
Respuesta: Seguridad en PHP [Importante];

Cita:
Iniciado por Heli0s Ver Mensaje
Que caracteres tiene la contraseña? la cuestion es que a la hora de registrar un usuario tambien tendría que haber sido pasada la contraseña por mysql_real_escape_string, pero como cuando lo registrastes no usabas esa funcion, ahora la contraseña la detecta como diferente, pero si lo pones en el formulario de registrar y registras un usuario nuevo debería ir a la perfeccion.

Sobre htmlentities.

Código PHP:
$string htmlentities($stringaconvertir); 
Más sencillo imposible.
Es posible que sea por ese motivo, asique voy a probarlo y te comento.

si encriptase la contraseña en md5 tambien tendría que seguir pasandola por mysql_real_escape_string no?

Entonces el htmlentities me quedaría;

$mensaje = htmlentities($mensaje);

y despues debería aplicarlo así:

$nickN = ("$nick", $mensaje);

No?
  #46 (permalink)  
Antiguo 13/05/2010, 05:27
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: Seguridad en PHP [Importante];

Cita:
Iniciado por Flow89 Ver Mensaje
si encriptase la contraseña en md5 tambien tendría que seguir pasandola por mysql_real_escape_string no?
No haría falta aunque tampoco está de más.

Cita:
Iniciado por Flow89 Ver Mensaje
Entonces el htmlentities me quedaría;

$mensaje = htmlentities($mensaje);

y despues debería aplicarlo así:

$nickN = ("$nick", $mensaje);

No?
No, es tan sencillo como:

Código PHP:
$nickN htmlentities($nickN); 
No entiendo como te complicas tanto a veces, es simplemente una función que devuelve el valor que le pasas por parámetro pero con los cambios que dicha función realiza.


Un saludo
  #47 (permalink)  
Antiguo 13/05/2010, 05:42
Avatar de Flow89  
Fecha de Ingreso: abril-2010
Ubicación: Valladolid
Mensajes: 346
Antigüedad: 14 años
Puntos: 1
Respuesta: Seguridad en PHP [Importante];

jajajaja, nose, quiero hacer las cosas bien y me complico un huevo, me como la cabeza jajaja.

Respecto a lo de la contraseña, he intentado creando un usuario nuevo, y me dice que es incorrecto....

prueba david prueba [email protected]

logeo con el nombre prueba y la contraseña david, y no funciona XD

te dejo los codigos de login.php, ingresar.php y registrar.php

login
Código PHP:
<?php
  
include("conex.php");
  include(
"segu.php");
 
$loginCorrecto false;
$tNick mysql_real_escape_string($HTTP_COOKIE_VARS["usNick"]);
$tPass mysql_real_escape_string($HTTP_COOKIE_VARS["usPass"]);

$result mysql_query("SELECT * FROM usuarios WHERE nick='$tNick' AND password='$tPass'");
$rows mysql_fetch_array($result);
    if(
mysql_num_rows($result) == 1){
        
$loginCorrecto true;
    } else {
        
$loginCorrecto false;
    }
mysql_free_result($result);
  
?>
registrar.php
Código PHP:
<html>
<head>
<title>JuventudMDC - Panel de Administraci&oacute;n</title>
<link href="../css/general.css" rel="stylesheet" type="text/css" />
</head>
<body>
<?php  
  
include("conex.php");
  include(
"segu.php");

$nick mysql_real_escape_string($HTTP_POST_VARS[nick]);
$password mysql_real_escape_string($HTTP_POST_VARS[password]);
$nombre mysql_real_escape_string($HTTP_POST_VARS[nombre]);
$email $HTTP_POST_VARS[email];


if(
trim($nick) != "" && trim($password) != "" && trim($nombre) != "" && trim($email) != ""){
  
$sql "SELECT id FROM usuarios WHERE nick='$nick'";
  
$result mysql_query($sql);
  if(
$row mysql_fetch_array($result)){
  echo 
"<META HTTP-EQUIV=\"refresh\" CONTENT=\"2; url=fusuarios.php\">";
  echo 
"<table style=\"height:100%;width:100%;\"border=\"0\"><tr><td class=\"estilo34\"><div align=\"center\">Error, ese nick ya ha sido registrado. <br> Seras redireccionado automaticamente.</div></td></tr></table>";
  }
  else
  {

$sql "INSERT INTO usuarios (nick,password,nombre,email) VALUES('$nick', '$nombre ', '$password', '$email')";   
mysql_query($sql);


  echo 
"<META HTTP-EQUIV=\"refresh\" CONTENT=\"2; url=administracion.php\">";
  echo 
"<table style=\"height:100%;width:100%;\"border=\"0\"><tr><td class=\"estilo34\"><div align=\"center\">El registro del usuario se ha efectuado correctamente. <br> Seras redireccionado automaticamente.</div></td></tr></table>";
  }
  
mysql_free_result($result);
  }
  else
  {
  echo 
"<META HTTP-EQUIV=\"refresh\" CONTENT=\"2; url=fusuarios.php\">";
echo 
"<table style=\"height:100%;width:100%;\"border=\"0\"><tr><td class=\"estilo34\"><div align=\"center\">Debes rellenar todos los campos. <br> Seras redireccionado automaticamente.</div></td></tr></table>";
   }
  
mysql_close();
  
?>
</body>
</html>
ingresar.php
Código PHP:
 <html>
<head>
<title>JuventudMDC - Panel de Administraci&oacute;n</title>
<link href="../css/general.css" rel="stylesheet" type="text/css" />
</head>
<body>
<?php
   
include("conex.php");
   include(
"segu.php");

$nick mysql_real_escape_string($HTTP_POST_VARS["nick"]);
$password mysql_real_escape_string($HTTP_POST_VARS["nick"]);

 
  if(
trim("$nick") != "" && trim("$password") != "")
  {
$nickN mysql_real_escape_string($nickN);
$passN mysql_real_escape_string($passN);
$nickN htmlentities($nick);
$passN htmlentities($password);


  
$result mysql_query("SELECT password FROM usuarios WHERE nick='$nickN'");
  if(
$row mysql_fetch_array($result))
   {
  if(
$row["password"] == $passN)
  {
  
//La cookie dura 1 hora
  
setcookie("usNick",$nickN,time()+36000);
  
setcookie("usPass",$passN,time()+36000);
  echo 
"<table style=\"height:100%;width:100%;\" border=\"0\"><tr><td class=\"estilo34\"><div align=\"center\">Logueado correctamente, ahora sera dirigido a el panel de administración automaticamente.</div></td></tr></table>";
  echo 
"<META HTTP-EQUIV=\"refresh\" CONTENT=\"2; url=administracion.php\">";
  }
  else
  {
  echo 
"<META HTTP-EQUIV=\"refresh\" CONTENT=\"2; url=../panel.php\">";
  echo 
"<table style=\"height:100%;width:100%;\"border=\"0\"><tr><td class=\"estilo34\"><div align=\"center\"><br>Contraseña incorrecta. <br> Seras redireccionado automaticamente.</div></td></tr></table>";
  }
  }
  else
  {
  echo 
"<META HTTP-EQUIV=\"refresh\" CONTENT=\"2; url=../panel.php\">";
  echo 
"<table style=\"height:100%;width:100%;\"border=\"0\"><tr><td class=\"estilo34\"><div align=\"center\"><br>Ese Usuario no existe en la base de datos. <br> Seras redireccionado automaticamente.</div></td></tr></table>";
  }
  
mysql_free_result($result);
  }
  else
  {
  echo 
"<META HTTP-EQUIV=\"refresh\" CONTENT=\"2; url=../panel.php\">";
  echo 
"<table style=\"height:100%;width:100%;\"border=\"0\"><tr><td class=\"estilo34\"><div align=\"center\"><br>Debe especificar un nick y password. <br> Seras redireccionado automaticamente.</div></td></tr></table>";
  }
  
mysql_close();  
  
?> 
</body>
</html>
Pienso que el fallo esta en registrar.php en la linea

if($row["password"] == $passN)
{

que alomejor deberia hacer un if($row(mysql_real_escape_string(["password"])) == $passN)

pero nose, pueden ser tantas cosas que ni idea..
  #48 (permalink)  
Antiguo 13/05/2010, 05:46
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: Seguridad en PHP [Importante];

Pero es que con esa contraseña no debería fallar, haz un echo para comprobar que es lo que hay en la variable de la contraseña.

Un saludo
  #49 (permalink)  
Antiguo 13/05/2010, 05:54
Avatar de Flow89  
Fecha de Ingreso: abril-2010
Ubicación: Valladolid
Mensajes: 346
Antigüedad: 14 años
Puntos: 1
Respuesta: Seguridad en PHP [Importante];

Cita:
Iniciado por Heli0s Ver Mensaje
Pero es que con esa contraseña no debería fallar, haz un echo para comprobar que es lo que hay en la variable de la contraseña.

Un saludo
Ahora me muestra un error

Parse error: syntax error, unexpected T_IF, expecting ',' or ';' in /home/a7366460/public_html/loginpanel/ingresar.php on line 16

la linea 16 es:

if(trim("$nick") != "" && trim("$password") != "");

y la 15 esta vacia xd
  #50 (permalink)  
Antiguo 13/05/2010, 05:57
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: Seguridad en PHP [Importante];

No entiendo ese condicional, para que haces un condicional si no le vas a indicar que haga ninguna acción?
  #51 (permalink)  
Antiguo 13/05/2010, 06:07
Avatar de Flow89  
Fecha de Ingreso: abril-2010
Ubicación: Valladolid
Mensajes: 346
Antigüedad: 14 años
Puntos: 1
Respuesta: Seguridad en PHP [Importante];

Cita:
Iniciado por Heli0s Ver Mensaje
No entiendo ese condicional, para que haces un condicional si no le vas a indicar que haga ninguna acción?
Esa condicional comprueba que los campos no esten vacios, y si estan vacios luego muestra un error.

El que me salia es porque se me olvido el ; del echo.

Aunque ahora tengo otro que antes no tenia


Parse error: syntax error, unexpected T_ELSE in /home/a7366460/public_html/loginpanel/ingresar.php on line 48



Joder con los errores.... XD
  #52 (permalink)  
Antiguo 13/05/2010, 07:05
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: Seguridad en PHP [Importante];

Lo que no entiendo es que al final del condicional pongas ;, no tiene sentido alguno, y si me pones el error ponme el código.

Un saludo
  #53 (permalink)  
Antiguo 13/05/2010, 08:34
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Seguridad en PHP [Importante];

1.- No usar HTTP_POST_VARS, HTTP_COOKIE_VARS, en cambio, usar $_POST o $_COOKIE.

2.- No usar ereg_* para expresiones regulares, en cambio, usar preg_*
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #54 (permalink)  
Antiguo 13/05/2010, 10:28
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: Seguridad en PHP [Importante];

Estaría bien que indicaras el porque de esos consejos que has dado.

Un saludo
  #55 (permalink)  
Antiguo 13/05/2010, 13:42
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Seguridad en PHP [Importante];

Ambas están obsoletas, por ende, si se llegase a encontrar un nuevo bug o algún error en su uso, no será corregido.ç

Si entras a :

http://php.net/manual/en/reserved.variables.post.php

Notarás que dice :

Código:
$_POST
$HTTP_POST_VARS [deprecated] ( obsoleto )
Y acá : http://cl.php.net/manual/en/function.ereg.php

Se lee :

Código:
This function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged.

// Traductor de Google :

Esta función es obsoleta desde PHP 5.3.0. Basándose en esta función es sumamente desalentador.
En otras palabras, no es recomendable usar funciones u otros que ya no serán mantenidos en actuales y futuras versiones de php.
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #56 (permalink)  
Antiguo 13/05/2010, 14:06
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: Seguridad en PHP [Importante];

Lo de que HTTP_POST_VARS estaba obsoleto ya lo sabía, lo de ereg no lo sabia, bueno saberlo y bueno para este post, gracias por la información.

Un saludo
  #57 (permalink)  
Antiguo 14/05/2010, 01:23
Avatar de Flow89  
Fecha de Ingreso: abril-2010
Ubicación: Valladolid
Mensajes: 346
Antigüedad: 14 años
Puntos: 1
Respuesta: Seguridad en PHP [Importante];

Ok, gracias, Modificaré mis HTTP_POST_VARS por $_POST

Respecto a el codigo Heli0s aqui lo tienes;

Código PHP:
 <html>
<head>
<title>JuventudMDC - Panel de Administraci&oacute;n</title>
<link href="../css/general.css" rel="stylesheet" type="text/css" />
</head>
<body>
<?php
   
include("conex.php");
   include(
"segu.php");

$nick mysql_real_escape_string($HTTP_POST_VARS["nick"]);
$password mysql_real_escape_string($HTTP_POST_VARS["password"]);
echo 
"$password";

 
  if(
trim("$nick") != "" && trim("$password") != "");
  {
$nickN mysql_real_escape_string($nickN);
$passN mysql_real_escape_string($passN);
$nickN htmlentities($nick);
$passN htmlentities($password);


  
$result mysql_query("SELECT password FROM usuarios WHERE nick='$nickN'");
  if(
$row mysql_fetch_array($result))
   {
  if(
$row["password"] == $passN)
  {
  
//La cookie dura 1 hora
  
setcookie("usNick",$nickN,time()+36000);
  
setcookie("usPass",$passN,time()+36000);
  echo 
"<table style=\"height:100%;width:100%;\" border=\"0\"><tr><td class=\"estilo34\"><div align=\"center\">Logueado correctamente, ahora sera dirigido a el panel de administración automaticamente.</div></td></tr></table>";
  echo 
"<META HTTP-EQUIV=\"refresh\" CONTENT=\"2; url=administracion.php\">";
  }
  else
  {
  echo 
"<META HTTP-EQUIV=\"refresh\" CONTENT=\"2; url=../panel.php\">";
  echo 
"<table style=\"height:100%;width:100%;\"border=\"0\"><tr><td class=\"estilo34\"><div align=\"center\"><br>Contraseña incorrecta. <br> Seras redireccionado automaticamente.</div></td></tr></table>";
  }
  }
  else
  {
  echo 
"<META HTTP-EQUIV=\"refresh\" CONTENT=\"2; url=../panel.php\">";
  echo 
"<table style=\"height:100%;width:100%;\"border=\"0\"><tr><td class=\"estilo34\"><div align=\"center\"><br>Ese Usuario no existe en la base de datos. <br> Seras redireccionado automaticamente.</div></td></tr></table>";
  }
  
mysql_free_result($result);
  }
  else
  {
  echo 
"<META HTTP-EQUIV=\"refresh\" CONTENT=\"2; url=../panel.php\">";
  echo 
"<table style=\"height:100%;width:100%;\"border=\"0\"><tr><td class=\"estilo34\"><div align=\"center\"><br>Debe especificar un nick y password. <br> Seras redireccionado automaticamente.</div></td></tr></table>";
  }
  
mysql_close();  
  
?> 
</body>
</html>

Todo a pasado a raiz de meter el campo contraseña por un mysql_real_escape_string, que no reconocia la contraseña como valida aún estando bien.

PD:Te conteste en el post de HTML y CSS, te puse los codigos, jeje.

Última edición por Flow89; 14/05/2010 a las 01:35
  #58 (permalink)  
Antiguo 14/05/2010, 01:39
Avatar de Flow89  
Fecha de Ingreso: abril-2010
Ubicación: Valladolid
Mensajes: 346
Antigüedad: 14 años
Puntos: 1
Respuesta: Seguridad en PHP [Importante];

Listo, ya he arreglado los problemas.

Uno de los 3 que habia era el ; en la condicional (no me di cuenta, al ponerlo en la condicional, luego no reconocía el ELSE (La puse por desesperacion a ver si arreglaba el resto xD)).

El segundo era que se me habia escapado una letra por ahí :$ jeje.

El tercero era el echo "$password"; que no se porque, pero daba error :S

Un saludo.

PD: Os dejo el codigo arreglado y modificado lo de las $_POST.

Código PHP:
 <html>
<head>
<title>JuventudMDC - Panel de Administraci&oacute;n</title>
<link href="../css/general.css" rel="stylesheet" type="text/css" />
</head>
<body>
<?php
   
include("conex.php");
   include(
"segu.php");

$nick mysql_real_escape_string($_POST["nick"]);
$password mysql_real_escape_string($_POST["password"]);

 
  if(
trim("$nick") != "" && trim("$password") != "")
  {
$nickN mysql_real_escape_string($nickN);
$passN mysql_real_escape_string($passN);
$nickN htmlentities($nick);
$passN htmlentities($password);


  
$result mysql_query("SELECT password FROM usuarios WHERE nick='$nickN'");
  if(
$row mysql_fetch_array($result))
   {
  if(
$row["password"] == $passN)
  {
  
//La cookie dura 1 hora
  
setcookie("usNick",$nickN,time()+36000);
  
setcookie("usPass",$passN,time()+36000);
  echo 
"<table style=\"height:100%;width:100%;\" border=\"0\"><tr><td class=\"estilo34\"><div align=\"center\">Logueado correctamente, ahora sera dirigido a el panel de administración automaticamente.</div></td></tr></table>";
  echo 
"<META HTTP-EQUIV=\"refresh\" CONTENT=\"2; url=administracion.php\">";
  }
  else
  {
  echo 
"<META HTTP-EQUIV=\"refresh\" CONTENT=\"2; url=../panel.php\">";
  echo 
"<table style=\"height:100%;width:100%;\"border=\"0\"><tr><td class=\"estilo34\"><div align=\"center\"><br>Contraseña incorrecta. <br> Seras redireccionado automaticamente.</div></td></tr></table>";
  }
  }
  else
  {
  echo 
"<META HTTP-EQUIV=\"refresh\" CONTENT=\"2; url=../panel.php\">";
  echo 
"<table style=\"height:100%;width:100%;\"border=\"0\"><tr><td class=\"estilo34\"><div align=\"center\"><br>Ese Usuario no existe en la base de datos. <br> Seras redireccionado automaticamente.</div></td></tr></table>";
  }
  
mysql_free_result($result);
  }
  else
  {
  echo 
"<META HTTP-EQUIV=\"refresh\" CONTENT=\"2; url=../panel.php\">";
  echo 
"<table style=\"height:100%;width:100%;\"border=\"0\"><tr><td class=\"estilo34\"><div align=\"center\"><br>Debe especificar un nick y password. <br> Seras redireccionado automaticamente.</div></td></tr></table>";
  }
  
mysql_close();  
  
?> 
</body>
</html>
  #59 (permalink)  
Antiguo 14/05/2010, 02:27
Avatar de Flow89  
Fecha de Ingreso: abril-2010
Ubicación: Valladolid
Mensajes: 346
Antigüedad: 14 años
Puntos: 1
Respuesta: Seguridad en PHP [Importante];

Tengo una duda.. el sistema de logueo se realiza en la carpeta administracion, despues yo estoy en otra página que esta en otra carpeta diferente, y le he añadido a esa carpeta el conex.php, el login.php y el segu.php

El caso es que, al cambiar de administracion.php que esta en la carpeta administracion, a usuarios.php que esta en la carpeta usuarios, el sistema de login me dice que no estoy logueado.

Que puedo hacer? :S
  #60 (permalink)  
Antiguo 14/05/2010, 02:28
Avatar de Flow89  
Fecha de Ingreso: abril-2010
Ubicación: Valladolid
Mensajes: 346
Antigüedad: 14 años
Puntos: 1
Respuesta: Seguridad en PHP [Importante];

ah el contenido de usuarios.php es este

Código PHP:
<html>
<head>
<title>Panel de Administracion - Noticias</title>
<link href="../css/general.css" rel="stylesheet" type="text/css" /> 
<style type="text/css">
<!--
body {
    background-image: url(../imagenes/bg_pattern.gif);
}
-->
</style>
</head>

<?php
//incluimos el archivo de conexion y el login
include("conex.php");
include(
"login.php");

//comprobamos si esta logueado correctamente, si lo esta mostramos la pagina 
if($loginCorrecto)
?>
<body>
<table width="650" border="0" align="center">
<tr>
      <td colspan="2"><div align="center"><img src="http://www.forosdelweb.com/f18/imagenes/panel.png" width="500" height="200" /></div></td>
<tr>
    <td><div align="center" class="Estilo16">Registra un Usuario | <a href='../loginpanel/administracion.php'> Volver </a></div></td>
  </tr>
<tr><td>   
      <FORM ACTION="registrar.php" METHOD="post">
   <br>
      <b>* Nick:</b><br><br>
 <INPUT TYPE="text" NAME="nick" SIZE="20" MAXLENGTH="20">
   
      <BR><br>
  
      <b>* Email:</b><br><br>
 <INPUT TYPE="text" NAME="email" SIZE="28" MAXLENGTH="100">
   
      <BR><br>
   
      <b>* Password:</b><br><br>
 <INPUT TYPE="password" NAME="password" SIZE="28" MAXLENGTH="20">
  
      <BR><br>
   
      <b>* Nombre:</b><br><br>
 <INPUT TYPE="text" NAME="nombre" SIZE="28" MAXLENGTH="255">
   
      <BR><br>
  
      <INPUT TYPE="submit" CLASS="boton" VALUE="Registrar">
  
      </FORM> 
</td></tr>
</table>


<?php 
}
//si no esta logueado, le mostramos este error y le redirigimos.
else

echo 
"<META HTTP-EQUIV=\"refresh\" CONTENT=\"2; url=../panel.php\">";
echo 
"<table style=\"height:100%;width:100%;\" border=\"0\"><tr><td class=\"estilo34\"><div align=\"center\">No estas logueado, no puedes acceder aquí.<br> Seras redireccionado automaticamente.</div></td></tr></table>"
}
?>
</body>
</html>

Etiquetas: funciones, medidas, securityphp, seguridad
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 21:58.