Foros del Web » Programando para Internet » PHP »

seguridad en libro de visitas

Estas en el tema de seguridad en libro de visitas en el foro de PHP en Foros del Web. holas me han pedido rehacer un libro de visitas en una web, en el cual han estado metiendo código malicioso según ellos, entonces voy a ...
  #1 (permalink)  
Antiguo 23/06/2009, 21:34
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 19 años, 2 meses
Puntos: 49
seguridad en libro de visitas

holas me han pedido rehacer un libro de visitas en una web, en el cual han estado metiendo código malicioso según ellos, entonces voy a ver el fuente y tienen

formulario :
Código html:
Ver original
  1. <form method="POST" action="pagina1.php">
  2. <input type="text" name="nick"><br>
  3. <textarea name="mensaje"></textarea><br>
  4. <input type="submit" name="enviar" value="Enviar">
  5. </form>

y en el php solo tiene

Código php:
Ver original
  1. <?php
  2. if (($_POST[nick] != "") && ($_POST[mensaje] !=""))
  3. {
  4. mysql_query ("INSERT INTO libro"
  5.                 ." (nick, comentarios)"
  6.                 ." Values"
  7.                 ." ('$_POST[nick]', '$_POST[mensaje]')") or die ("Error ".mysql_error());
  8. echo "Se Ingreso tu comentario correctamente";
  9. }
  10. else
  11. {
  12. echo "Debes Ingresar todos los Campos";
  13. }
  14. ?>


obiamente le debo aplicar mas restricciones que saltan al a vista, pero mi duda es con addslashes(); por ejemplo ya me evito problemas, y si ademas agrego una funcion tipo

Código php:
Ver original
  1. function limpiaCadena ($cadena)
  2. {
  3. $cadena=mysql_real_escape_string($cadena);
  4. return $cadena;
  5. }


con mysql_real_escape_string, ya estaría asegurando mas el formulario a posibles ataques, no se si agregarían algo mas, o me pueden orientar mas al respecto....

ej, antes de ingresar a base de datos
Código php:
Ver original
  1. $usuario = limpiaCadena(addslashes($_POST[nick]));
  2. $mensaje = limpiaCadena(addslashes($_POST[mensaje]));


que pasaría si ademas agrego un htmlentities(); por ejemplo, es como mucho, es necesario? y todas esas son mis dudas

pd: agrego que ellos quieren por ejemplo que se vea codigo en el libro como se ve aqui en el foro, solo que no afecte al funcionamiento, digo si escribo <script>alert: ..... por ejemplo no me salte un alert pero que si se vea el codigo que se escribio :/

saludos...
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #2 (permalink)  
Antiguo 24/06/2009, 00:26
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: seguridad en libro de visitas

Yo verificaria:

1- Que el campo no este vacio trim()
2- La longitud de los textos, que el "nick" tenga entre 3 y 40 caracteres y para el mensaje strlen()
3- Que no permitas html ni javascript htmlentities()
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 24/06/2009, 02:44
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 19 años, 2 meses
Puntos: 49
Respuesta: seguridad en libro de visitas

a eso iba.... lo de trim(); pues lo hacia con un simple

Código php:
Ver original
  1. if ($_POST[campo] == "")
  2. {
  3. echo "debe llenar el campo";
  4. }
  5. else
  6. {
  7. echo "dato correcto";
  8. }

veré que tal con trim(); que lo había leído pero nunca lo he usado....
lo del strlen(); ya lo tenia contemplado para los largos y si mas menos los nicks entre 3 y 30 en mi caso, y también veo que el mensaje sea mayor al menos de 10 caracteres....
tambien reviso que el mensaje no sea puro tabulador al principio y final, con expresiones regulares :
if (preg_match('/^\s|\s$/', $_POST[campo]) ....

ademas manejo una tabla que me almacena la ip, time y expire, la ocupo para que el usuario al menos deba esperar 30 segundos por cada post.....

a lo que iba era a eso lo del htmlentities(); pero me preguntaba si agrego lo del addslashes(); y la funcion : mysql_real_escape_string();
sera mas que suficiente para no permitir inyecciones o alguna que otra intrusión, gracias por tu tiempo triby :D
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #4 (permalink)  
Antiguo 24/06/2009, 03:27
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: seguridad en libro de visitas

La funcion trim() te elimina espacios, tabuladores y saltos de linea (no recuerdo si algo mas) al principio y al final del texto.

Para probarlo:
Código php:
Ver original
  1. $var1 = "\t Esto es una cadena con saltos al final   \n    \t    ";
  2. echo '<pre>';
  3. echo trim($var1);
  4. echo '</pre>';

Si la cadena contiene solo espacios (tabuladores o saltos de linea) trim te la devolvera como cadena vacia.

adslashes es similar a mysql_real_escape_string y no deberias usarlas en conjunto porque estarias escapando doblemente, en todo caso, tu funcion limpiaCadena() la cambiaria por:

Código php:
Ver original
  1. function limpiaCadena ($cadena)
  2. {
  3.         $cadena = stripslashes($cadena);
  4.     return=mysql_real_escape_string($cadena);
  5. }

Si las comillas magicas estan habilitadas, todos los datos recibidos en $_GET y $_POST estaran escapados con addslashes, por eso es necesario "deshacer" esa accion con stripslashes y, posteriormente, escapar con la funcion adecuada para base de datos, en este caso: mysql_real_escape_string()

Cita:
Manual de adslashes()

La directiva de PHP magic_quotes_gpc tiene un valor por defecto de on, por lo que de forma automática se llama a la función addslashes() en todos los datos que llegan a través de los métodos GET y POST y a través de las cookies. Por tanto, no es necesario emplear la función addslashes() en las cadenas que ya han sido escapadas mediante la directiva magic_quotes_gpc ya que si no, se haría un doble escape. La función get_magic_quotes_gpc() puede ser útil para comprobar el valor de esta directiva.
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 24/06/2009, 04:22
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 19 años, 2 meses
Puntos: 49
Respuesta: seguridad en libro de visitas

ok muchas gracias ya me queda mas claro respecto a tu funcion esta bien así
if (get_magic_quotes_gpc()) o deberia ir if (!get_magic_quotes_gpc()) con el ! delante

muchas gracias por tu tiempo :)
__________________
Gokuh Salvo al mundo. PUNTO!!!!

Última edición por kaninox; 24/06/2009 a las 05:01
  #6 (permalink)  
Antiguo 24/06/2009, 05:06
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: seguridad en libro de visitas

La funcion limpiaCadena deberia revisar si estan activadas las comillas magicas, de ser asi, deshace lo hecho por addslashes, por eso no lleva el signo de admiracion ! que equivale a NOT.

Para evitar problemas con acentos y tildes podrias usar htmlspecialchars() y verificar que tanto la base de datos, como tu archivo y la meta correspondiente usen la misma codificacion de caracteres (UTF-8 o ISO8859-1).
__________________
- León, Guanajuato
- GV-Foto
  #7 (permalink)  
Antiguo 24/06/2009, 12:40
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 19 años, 2 meses
Puntos: 49
Respuesta: seguridad en libro de visitas

me dio error en el return=mysql_real_escape_string($cadena);
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #8 (permalink)  
Antiguo 24/06/2009, 12:49
Avatar de newboy_master  
Fecha de Ingreso: enero-2008
Ubicación: Granada
Mensajes: 882
Antigüedad: 16 años, 10 meses
Puntos: 46
Respuesta: seguridad en libro de visitas

Prueba así:

return mysql_real_escape_string($cadena);
__________________
@jslirola - Programador Web Freelance.
  #9 (permalink)  
Antiguo 24/06/2009, 13:28
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: seguridad en libro de visitas

Eso es lo que pasa cuando uno tiene sueño.

Como ya te dijo newboy_master, en esa linea reemplaza el signo igual por un espacio.
__________________
- León, Guanajuato
- GV-Foto
  #10 (permalink)  
Antiguo 24/06/2009, 17:33
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 19 años, 2 meses
Puntos: 49
Respuesta: seguridad en libro de visitas

como se nota que yo igual ando con sueño que tampoco me di cuenta, crei que era otro tipo problema X)

bueno saludos a ambos en especial a triby por su tiempo :)
__________________
Gokuh Salvo al mundo. PUNTO!!!!
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




La zona horaria es GMT -6. Ahora son las 22:43.