長い間不在からスクリプトに戻った後、私は突然不合理な衛生措置をとどめています。
予期せずfalse
を返すフィルタで問題が見つかりました。PHP:FILTER_UNSAFE_RAWがFALSEを返す原因は何ですか?
は、ここに私の意図せぬ結果を複製する例を示します
$test = [ 'apple', 'bananna', 'orange', 'lime', 'grape', ];
var_export(filter_var($test, FILTER_UNSAFE_RAW)); // false
私はFILTER_UNSAFE_RAW
がちょうどそのまま入力(この場合は配列)を返すことになっていると思いました。
私は私の理解とアプローチに間違っていますか?
注:私のコードは厳密に自立となど軽量可能な限り、そうではなく、サードパーティのライブラリ/クラスをロードしなければなら
、私はちょうど書い-によ必要なシンプルなヘルパー関数。
例:
$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' => '[email protected]',
'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
?