XSS (Cross-site scripting) es un ataque a un sitio web que aprovecha una vulnerabilidad en el código que puede permitir embeber html o javascript u obtener datos de cookies de usuarios.
La mejor forma para evitar estos ataques es desconfiar de todos los datos que pueda enviar el usuario sea mediante un parametro en una url por GET o por un formulario por POST.
Donde más se suelen ver estos ataques son en los buscadores de las webs que algunas no limpian el parametro de búsqueda que envia el usuario.
Solución
Para evitar eso en PHP existe la función strip_tags que dada una cadena de texto limpia todas las etiquetas HTML que encuentre.
Muy buenas!!
Resumiendo mucho,
Lo primero que haría es que no le mostraría al usuario por pantalla los campos que haya introducido en el formulario, por mucho que
creamos que los tenemos controlados.
Además usaría expresiones regulares para controlar ciertos valores, por ejemplo si estamos esperando un valor numérico,
$numero=intval(preg_replace("/[^0-9]/","",$_POST["campo"]));
Para prevenir las inyecciones de SQL (en mi opinión), lo mejor es "escapar las cadenas". Si nos ponemos paranoicos se podría incluir algún control más. Si existe la posibilidad de poder usar procedimientos almacenados mejor que mejor.
Para inyecciones de LDAP se podría hacer algo parecido.
La mejor forma para evitar estos ataques es desconfiar de todos los datos que pueda enviar el usuario sea mediante un parametro en una url por GET o por un formulario por POST.
Donde más se suelen ver estos ataques son en los buscadores de las webs que algunas no limpian el parametro de búsqueda que envia el usuario.
Solución
Para evitar eso en PHP existe la función strip_tags que dada una cadena de texto limpia todas las etiquetas HTML que encuentre.
En javascript podemos encontrar una función adaptada de strip_tags que hace lo mismo.
Más información
Wikipedia
27/05/2013 20:52
Resumiendo mucho,
Lo primero que haría es que no le mostraría al usuario por pantalla los campos que haya introducido en el formulario, por mucho que
creamos que los tenemos controlados.
Además usaría expresiones regulares para controlar ciertos valores, por ejemplo si estamos esperando un valor numérico,
$numero=intval(preg_replace("/[^0-9]/","",$_POST["campo"]));
Para prevenir las inyecciones de SQL (en mi opinión), lo mejor es "escapar las cadenas". Si nos ponemos paranoicos se podría incluir algún control más. Si existe la posibilidad de poder usar procedimientos almacenados mejor que mejor.
Para inyecciones de LDAP se podría hacer algo parecido.
Saludos!!
16/05/2013 10:38