Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Prevenir xss e inyeccion sql

Estas en el tema de Prevenir xss e inyeccion sql en el foro de PHP en Foros del Web. Hola a todos, Por más que leo sobre el tema no consigo quedarme contento con mi código de seguridad ante ingresos a BBDD vía formularios. ...
  #1 (permalink)  
Antiguo 08/04/2014, 03:15
 
Fecha de Ingreso: noviembre-2008
Mensajes: 85
Antigüedad: 16 años
Puntos: 2
Prevenir xss e inyeccion sql

Hola a todos,

Por más que leo sobre el tema no consigo quedarme contento con mi código de seguridad ante ingresos a BBDD vía formularios. Estoy desarrollando una web con distintos tipos de formularios (registros, inicios de sesión, foros, edición de noticias, ...). Entiendo que cada formulario responde a una necesidad y como tal hay que tratarlo.

Alguna recomendación (alguna clase, función, ...) que me pueda asegurar un mínimo mis BBDD.

Gracias.
  #2 (permalink)  
Antiguo 08/04/2014, 03:21
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Prevenir xss e inyeccion sql

En PHP, hay dos funciones prácticas que te pueden ayudar a prevenir ambas cosas: strip_tags, para eliminar elementos HTML y mysqli_real_escape_string, para escapar los caracteres especiales en una cadena.

También tienes la opción de desinfectar los datos con expresiones regulares, pero necesitas aprender primero sobre ellas para poder aplicarlas pues son un tanto complejas, aunque con estudio, se logra dominarlas.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 08/04/2014, 03:31
 
Fecha de Ingreso: noviembre-2008
Mensajes: 85
Antigüedad: 16 años
Puntos: 2
Respuesta: Prevenir xss e inyeccion sql

Hola Alexis88,

Gracias por responder.
Sí en determinados formularios como los de un foro necesito que los usuarios puedan utilizar ciertas etiquetas html pero evitando inyeccion XSS? tienes alguna función interesante?
  #4 (permalink)  
Antiguo 08/04/2014, 06:17
Avatar de Geghnar  
Fecha de Ingreso: noviembre-2012
Ubicación: Vigo
Mensajes: 17
Antigüedad: 12 años
Puntos: 2
Respuesta: Prevenir xss e inyeccion sql

Hola urruju; no sé si te puede servir pero yo utilizo esto:

Código PHP:
strip_tags($contenido,'<p><a><span><em><br><i><u><b><strong>'); 
De esta manera elimino todas las etiquetas html excepto las indicadas.

Salu2.
  #5 (permalink)  
Antiguo 08/04/2014, 06:19
Avatar de jheckson  
Fecha de Ingreso: febrero-2011
Ubicación: $VE->Aragua['Maracay']
Mensajes: 109
Antigüedad: 13 años, 9 meses
Puntos: 8
Respuesta: Prevenir xss e inyeccion sql

Lo que te dice Alexis88 es la solucion, para evitar quitar algunas etiquetas solo debes utilizar el segundo parametro de la function strip_tags (lee el link que puso Alexis88 de dicha function para mas informacion), con el cual solo debes indicar cuales funciones debes utilizar y cuales no!

Código PHP:
Ver original
  1. <?php
  2. $text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
  3. echo strip_tags($text);
  4. echo "\n";
  5. // Permite <p> y <a>
  6. echo strip_tags($text, '<p><a>');
  7. ?>

El resultado de los ejemplos serían:

Test paragraph. Other text
<p>Test paragraph.</p> <a href="#fragment">Other text</a>
__________________
Ayudar a otros, es una de las mejores formas de aprender y ayudarse a si mismo! =)

>[Jheck]<
  #6 (permalink)  
Antiguo 08/04/2014, 08:44
 
Fecha de Ingreso: noviembre-2008
Mensajes: 85
Antigüedad: 16 años
Puntos: 2
Respuesta: Prevenir xss e inyeccion sql

Gracias por vuestras soluciones.
  #7 (permalink)  
Antiguo 08/04/2014, 08:53
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 11 años, 2 meses
Puntos: 578
Respuesta: Prevenir xss e inyeccion sql

Aquí tienes uno muy completo contra ataques XSS.
  #8 (permalink)  
Antiguo 08/04/2014, 12:10
Avatar de JinSunMi  
Fecha de Ingreso: octubre-2006
Ubicación: Lima
Mensajes: 101
Antigüedad: 18 años
Puntos: 0
Respuesta: Prevenir xss e inyeccion sql

PHPeros

Tengo un formulario y su procesador.php con eregi
quiero evitar que inserten XSS en mi campo &Comentarios y como sabes eregi es obsoleto y he comenzado a recibir ataques en mi form

Este es mi código, me funcionó 2 años pero mi hosting emigró a php5.3

Código PHP:
if (ereg('http:|www.|blogspot|sex-online|poker-casino|superinsuranceworld|viagra'$Comentarios)){
echo 
'<b>SPAM. No puedes incluir direcciones web en el área para comentarios,<br>por favor retíralas para poder enviar el mensaje.</b>';
exit;
}else{ 
}
mail($destino,$asunto,$cuerpo,$headers);
?> 
No quiero recibir más links ni ningún html en mi campo comentarios

¿Como puedo implementar ese código que has puesto? Mi procesador.php que envia los datos al correo tiene html incrustado y por ello recibo los datos en la bandeja de entrada en forma de una tabla html y quiero que esto no cambie

¿Como puedo hacer?
Saludos
Jin
__________________
Veterinaria por pasión, webmaster por placer
  #9 (permalink)  
Antiguo 08/04/2014, 12:44
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Prevenir xss e inyeccion sql

Cita:
Iniciado por urruju Ver Mensaje
Hola Alexis88,

Gracias por responder.
Sí en determinados formularios como los de un foro necesito que los usuarios puedan utilizar ciertas etiquetas html pero evitando inyeccion XSS? tienes alguna función interesante?
Además de usar el segundo parámetro de la función strip_tags que te indiqué, para lo que buscas hacer puedes utilizar la función htmlentities, la cual convierte todos los caracteres con equivalente HTML en entidades HTML. Lee más al respecto en el enlace adjunto.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Etiquetas: sql, xss
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 12:17.