$_GET und $_POST filtern
anonymuss222
- php
Hi, damit ich mir die Überprüfung jedes Input-Feldes spare (damit es zu keiner SQL - Injection oder einer XSS lücke kommt) will ich diverse Zeichen von allen $_GET und $_POST variablen rausnehmen. Hier mein Lösungsanasatz:
<?php
function clearVars() {
foreach($_GET as $key => $value) {
$_GET[$key] = stripslashes($value);
$_GET[$key] = str_replace('"', '', $value);
$_GET[$key] = str_replace(''', '', $value);
$_GET[$key] = str_replace('\', '', $value);
$_GET[$key] = str_replace(';', '', $value);
}
}
clearVars();
echo $_GET[a].'<br>';
echo $_GET[b].'<br>';
?>
Das Problem ist, dass die Zeichen trozdem alle drinnen bleiben. Der Code ansich Funktioniert, wenn ich ihn direkt auf eine Variable anwende. Jedoch bei $_POST und $_GET funktioniert es nicht wie gewollt.
http://localhost/test.php?a=";aaa"&b='wblaaaawad;'
ergibt:
";aaa"
'wblaaaawad;'
Hi,
Hi, damit ich mir die Überprüfung jedes Input-Feldes spare (damit es zu keiner SQL - Injection oder einer XSS lücke kommt) will ich diverse Zeichen von allen $_GET und $_POST variablen rausnehmen.
warum maskierst Du sie nicht statt dessen kontextspezifisch?
Das Problem ist, dass die Zeichen trozdem alle drinnen bleiben.
Das Problem ist, dass Du Daten zerstörst, anstatt sie ungefährlich zu machen.
Cheatah
Danke für die schnelle Antwort.
Also geht es nicht alle Variablen die von POST und GET kommen direkt in der index.php am anfang sozusagen zu beschneiden?
Hallo,
Also geht es nicht alle Variablen die von POST und GET kommen direkt in der index.php am anfang sozusagen zu beschneiden?
Du kannst das tun, es ist jedoch nicht sinnvoll. Behandle Daten genau so, wie es jeweils erforderlich ist. Behandle Daten genau dann, wenn es erforderlich ist.
Ein Artikel zu diesem Thema ist in Vorbereitung:
http://aktuell.de.selfhtml.org/artikel/review/kontextwechsel/
Freundliche Grüße
Vinzenz
Mahlzeit anonymuss222,
Das Problem ist, dass die Zeichen trozdem alle drinnen bleiben.
Kein Wunder - schließlich nimmst Du in einer Schleife jeden Wert des Arrays $_GET ...
foreach($_GET as $key => $value) {
... und überschreibst ihn einmal hiermit ...
$\_GET[$key] = stripslashes($value);
... und einmal hiermit ...
$\_GET[$key] = str\_replace('"', '', $value);
... und einmal hiermit ...
$\_GET[$key] = str\_replace('\'', '', $value);
... und einmal hiermit ...
$\_GET[$key] = str\_replace('\\', '', $value);
... und am Schluss noch einmal hiermit:
$\_GET[$key] = str\_replace(';', '', $value);
}
Vermutlich jedoch willst Du stattdessen nach jeder einzelnen Wertvermurksung das (Zwischen-)Ergebnis eher in der Variablen $value zwischenspeichern und ganz zum Schluss das, was sich dann noch als kümmerlicher Rest in dieser Variablen befindet, wieder ins Array $_GET zurückschreiben.
Jedoch bei $_POST und $_GET funktioniert es nicht wie gewollt.
Das liegt aber eher daran, dass kein PHP-Interpreter dieser Welt raten kann, was Du Dir so vorstellst, sondern nur genau das macht, was Du ihm (in Form von Programmcode) vorsetzt.
MfG,
EKKi