【发布时间】:2018-06-03 17:52:09
【问题描述】:
在久违的回到剧本后,我陷入了一次突然失败的清理工作。
我在过滤器意外返回false 中发现了问题。
这是一个复制我的意外结果的示例:
$test = [ 'apple', 'bananna', 'orange', 'lime', 'grape', ];
var_export( filter_var( $test, FILTER_UNSAFE_RAW )); // false
我认为FILTER_UNSAFE_RAW 应该只返回输入(在本例中为数组)不变。
我的理解/方法错了吗?
注意:
我的代码必须严格自力更生并尽可能轻量级,因此我只是在需要的地方编写简单的辅助函数,而不是加载第 3 方库/类。
示例:
$filters = [
'sanitize' => [
'foo' => FILTER_SANITIZE_EMAIL,
'bar' => FILTER_UNSAFE_RAW,
],
'validate' => [
'foo' => FILTER_VALIDATE_EMAIL,
'bar' => [
'filter' => FILTER_VALIDATE_REGEXP,
'flags' => FILTER_REQUIRE_ARRAY,
'options' => [ 'regexp' => '/(apple|grape)/' ],
],
],
];
$test = [
'malicious' => 'something bad',
'foo' => 'test@ema.il',
'bar' => [ 'apple', 'grape', 'orange', ],
];
// validate
$checked = sanitizeInput( $filters, $test );
// sanitizer
function sanitizeInput( $f, $input )
{
// sanitize
$sanitized = filter_var_array( $input, $f['sanitize'] )
// validate
$validated = filter_var_array( $sanitized, $f['validate'] );
// if anything appears to have failed validation (was set to FALSE)
if( FALSE !== strpos( json_encode($validated), 'false' ))
{
...
如您所见,这种方法要求 bar 通过清理,即使不需要进行清理操作。
我是不是误会FILTER_UNSAFE_RAW?
【问题讨论】:
标签: php sanitization filter-var input-sanitization