오래간만에 대본을 읽은 후 갑자기 실패한 위생 처리에 막혔습니다.
예기치 않게 false
을 반환하는 필터에서 문제가 발견되었습니다.PHP : FILTER_UNSAFE_RAW가 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' => '[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
입니까?