Desinfizieren query-string in PHP
Ich habe eine Webseite mit einem query-string.
In PHP habe ich:
$querystring=$_SERVER["QUERY_STRING"];
echo "<html><head></head><body>
<a href='index.php?$querystring'>test</a>
</body></html>";
Muss ich desinfizieren den querystring?
Wenn ja, wie kann ich das bereinigen, und was sind einige mögliche Angriffe, wenn ich nicht?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie verwenden
htmlspecialchars($query, ENT_QUOTES)
zu verhindern, XSS-Angriffe.Aber immer noch, sollten Sie der weißen Liste für alle Parameter, weil eine intelligente Angreifer fälschen, Abfrage und versuchen Sie, einen CSRF Angriff.
Wenn Sie PHP >= 5.2.0 verwenden
filter_input
oderfilter_input_array
.Sagen wir mal deine URL und query-string ist so etwas wie
http://example.com/?liquor=gin&mixer=tonic&garnish=lime
.Filtern möchten, führen Sie etwas wie das folgende.
In diesem Fall sollten Sie urlencode-Funktion.
htmlspecialchars/htmlentities sind besser geeignet, wenn Sie gehen, um die Ausgabe Wert von der Abfrage-Parameter in der link-Titel zum Beispiel, aber nicht an der href/src-Attributen.
Können Sie bereinigen die Abfrage über mehrere Wege, aber das ist hier nicht der Ort, das zu tun. Sogar, wenn Sie senden eine sichere Abfrage BEKOMMEN, kann mir jemand die Abfrage ändern, die auf die Adressleiste, oder mit tamper data. Sie müssen zu bereinigen auf index.php (oder wo auch immer du die Daten verarbeiten). Wenn Sie MySQL verwenden, müssen Sie bereinigen diese Weise: