Este tema es tan malo!
¡NO debe filtrar la entrada del usuario! Es información que ha sido ingresada por él. ¿Qué vas a hacer si quiero que mi contraseña sea como la siguiente: '"'>s3cr3t<script>alert()</script>
Filtrar los caracteres y dejarme una contraseña modificada, por lo que no puedo ni siquiera tener éxito en mi primer inicio de sesión? Esto es malo.
La solución adecuada es usar declaraciones preparadas o mysql_real_escape_string()
para evitar inyecciones de sql y utilizar el escape contextual de los caracteres para evitar que el código html se estropee.
Déjame recordarte que la web es solo una de las formas en que puedes representar la información ingresada por el usuario. ¿Aceptarías tal desvinculación si algún software de escritorio lo hace? Espero que tu respuesta sea NO y entiendas por qué esta no es la manera correcta.
Tenga en cuenta que en un contexto diferente, se deben escapar caracteres diferentes. Por ejemplo, si se necesita mostrar el nombre de usuario como información sobre herramientas, que va a utilizar algo como:
<span title="{$user->firstName}">{$user->firstName}</span>
Sin embargo, si el usuario ha establecido su nombre de pila a ser como '"><script>window.document.location.href="http://google.com"</script>
lo que vas a hacer? Despojar las comillas? ¡Esto estaría tan mal! En lugar de hacer esto sin sentido, considere la posibilidad de escapar de las comillas mientras procesa los datos, ¡no mientras los persista!
Otro contexto que debe tener en cuenta es la prestación del valor en sí. Considere el código html usado anteriormente e imagine que el nombre del usuario sea como <textarea>
. Esto incluiría todo el código html que sigue en este elemento textarea, lo que dividiría toda la página.
Una vez más, considere la posibilidad de escanear los datos según el contexto en el que lo esté utilizando.
P.S No estoy seguro de cómo reaccionar ante esos votos negativos. ¿Estás, gente, en realidad leyendo mi respuesta?
dupe: http://stackoverflow.com/questions/129677/whats-the-best-method-for-sanitizing-user-input-with-php – troelskn
¡Este enfoque es incorrecto en tantos aspectos! He publicado una respuesta a continuación y califiqué cada una de las respuestas -1 porque sus autores se niegan a pensar. –