2009-04-20 29 views
19

Esto debería ser una pregunta elemental, pero ¿por qué es mejor usar algo como esto:¿Por qué es mejor usar filter_input()?

$pwd = filter_input(INPUT_POST, 'pwd'); 

En lugar de simplemente:

$pwd = $_POST['pwd']; 

PS: Yo entiendo que la extensión del filtro se puede utilizar con más argumentos para proporcionar un nivel adicional de desinfección.

+1

La pregunta tiene más votos que la respuesta aceptada. Interesante ... – sMaN

Respuesta

13

No lo es. $_GET, $_POST, $_COOKIE y $_REQUEST son filtered with default filter. filter_input(INPUT_POST, 'pwd') sin parámetros adicionales también usa el filtro predeterminado. Entonces no hay diferencia en absoluto.

+0

Estaba buscando 'filter_input' contra' htmlspecialchars' y notó que esto parece estar desactualizado. La mayoría de las configuraciones de PHP ya no filtran estos datos, el enlace que publicas incluso tiene el valor de configuración predeterminado establecido como "unsafe_raw" – cspray

+3

@Charles: en ambos casos, los datos pasan por el filtro predeterminado. Ese valor predeterminado ahora es '' unsafe_raw "' , pero eso no cambia el hecho de que el uso del parámetro 'filter_input' sin' filter' no le proporciona ningún nivel adicional de seguridad. – vartec

+0

Lo suficiente. Gracias por la información. – cspray

2

Todos los datos que se envían desde el cliente (como los datos POST) deben desinfectarse y escaparse (y aún mejor, comprobar su integridad) para garantizar que no va a matar su sitio web.

SQL Injection y Cross-site scripting son las dos mayores amenazas por no limpiar los datos enviados por el usuario.

+0

¿Todavía es necesario filter_input() si está utilizando consultas parametrizadas y htmlspecialchars() antes de imprimir datos proporcionados por el usuario? – Calvin

+0

filter_input (INPUT_POST, 'pwd'); (sin ningún otro argumento todavía desinfecta el valor? –

+1

@Ben: en general tiene razón, pero esa no es una respuesta a esta pregunta. – vartec

Cuestiones relacionadas