2012-10-07 72 views

Respuesta

31

Las banderas se explican en un different page of the documentation.

FILTER_FLAG_STRIP_LOW tiras de bytes en la entrada que tienen un valor numérico < 32, lo más notablemente null bytes y otra control characters tales como la campana ASCII. Esta es una buena idea si tiene la intención de pasar una entrada a otra aplicación que usa null-terminated strings. En general, los caracteres con un punto de código Unicode inferior a 32 no deben aparecer en la entrada del usuario, excepto para los caracteres de nueva línea 10 y 13.

FILTER_FLAG_STRIP_HIGH elimina los bytes en la entrada que tienen un valor numérico> 127. En casi todas las codificaciones, esos bytes representan caracteres que no son ASCII como ä, ¿, , etc. Pasar este indicador puede ser una curita para broken string encoding, que puede convertirse en security vulnerability. Sin embargo, se esperan caracteres que no sean ASCII en prácticamente todas las entradas del usuario.

En resumen:

filter_var("\0aä\x80", FILTER_SANITIZE_STRING) == "\0aä\x80" 
filter_var("\0aä\x80", FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW) == "aä\x80" 
filter_var("\0aä\x80", FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH) == "\0a" 
filter_var("\0aä\x80", FILTER_SANITIZE_STRING, 
      FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH) == "a" 
+6

Sería muy bueno si había una bandera STRIP_LOW_EXCEPT_NEWLINB, ya que hay un nosotros e caso para mantener los caracteres de nueva línea de textarea-fields. Por desgracia, no hay ninguno, por lo que ese caso especial debe ser manejado. – itpastorn

+0

algo no está funcionando en sus ejemplos, eche un vistazo https://eval.in/935865 –

+0

este es un buen ejemplo https://eval.in/935902 –

1
FILTER_FLAG_STRIP_LOW 

eliminar los caracteres con ASCII valor < 32

FILTER_FLAG_STRIP_HIGH 

eliminar los caracteres con ASCII valor > 127

Cuestiones relacionadas