FILTER_FLAG_STRIP_LOW vs FILTER_FLAG_STRIP_HIGH?

Moh*_*aji 18 php validation sanitization filter

你知道我在谈论filter_varPHP 5中的功能.

我访问过http://php.net/manual/en/filter.filters.sanitize.php,但我仍有疑问:

有什么确切的区别?

请提供一个示例,以便更容易澄清.

phi*_*hag 35

标志在文档不同页面中解释.

FILTER_FLAG_STRIP_LOW在输入中剥离具有数值<32的字节,最明显的是空字节和其他控制字符,例如ASCII钟.如果您打算将输入传递给另一个使用以null结尾的字符串的应用程序,这是一个好主意.通常,除了换行符10和13之外,Unicode代码点低于32的字符不应出现在用户输入中.

FILTER_FLAG_STRIP_HIGH条带输入中具有数值> 127的字节.在几乎每一个编码,这些字节代表非ASCII字符,例如ä,¿,?等传递此标志可以是一个创可贴用于破碎字符串编码,这可以成为一个安全漏洞.但是,几乎所有用户输入都需要非ASCII字符.

总结一下:

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"
Run Code Online (Sandbox Code Playgroud)

  • 如果有一个STRIP_LOW_EXCEPT_NEWLINB标志会很棒,因为有一个用例来保留textarea-fields中的换行符.唉,没有,所以必须处理特殊情况. (6认同)