Nachdem ich von einer langen Abwesenheit zu einem Skript zurückgekehrt bin, stecke ich an einer plötzlich fehlgeschlagenen Bereinigung.
Ich habe das Problem in einem Filter gefunden, der unerwartet false
zurückgibt.PHP: was könnte dazu führen, dass FILTER_UNSAFE_RAW FALSE zurückgibt?
Hier ist ein Beispiel meiner unbeabsichtigten Ergebnisse zu replizieren:
$test = [ 'apple', 'bananna', 'orange', 'lime', 'grape', ];
var_export(filter_var($test, FILTER_UNSAFE_RAW)); // false
Ich dachte, dass FILTER_UNSAFE_RAW
soll nur die Eingabe zurückzukehren (ein Array in diesem Fall) unverändert.
Bin ich falsch in meinem Verständnis/Ansatz?
HINWEIS:
Mein Code hat streng selbstständig und als leichtgewichtige wie möglich sein, also eher als 3rd-Party-Bibliotheken/Klassen laden, ich schreibe in nur einfachen Funktionen Helfer, wo nötig.
Beispiel:
$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'))
{
...
Wie Sie sehen können, erfordert dieser Ansatz, dass bar
sanitization geht, auch wenn keine desinfizierenden Maßnahmen erforderlich.
Bin ich Missverständnis FILTER_UNSAFE_RAW
?