Zitat von
Yheeky:
Dass ich die Eingaben nicht verhindern kann ist klar, aber es geht mir ja genau um dein 3.: ich will, dass "Müll" nicht weiter erkannt und weiter verarbeitet wird. Inwiefern da htmlspecialchars helfen soll, habe ich leider nicht verstanden.
Falsch. Betrachte alles was ankommt, als Muell. Dann sortierst du es (stripslashes falls magic_quotes an sind, htmlspecialchars, trim), und dann ueberlegst du ob du es verwenden willst und ob die Qualitaet passt (z.B. ob der Benutzername gewisse Kriterien erfuellt). Und merke: alles was du kriegst, sind Strings. Entweder du typisierst die Variablen selbst (z.B. intval() oder (int)) oder du musst jede Variable, die in ein
Query kommt mit Quotes umgeben und mysql_real_escape_string drueberlaufen lassen. Bei Strings ist es naemlich straeflich, das nicht zu tun.
Zum Code sag ich nur, OUCH. Nicht nur Spaces sind blanks, da gibts noch viel mehr. Wie gesagt, mit mysql_real_escape_string() escapen.
Folgender
Query-String:
Code:
get.php?username=';DROP%09TABLE%09Users;--
Kommt durch deine Pruefung durch, aber macht trotzdem scheisse. Und was machst du wenn der Benutzer ein Leerzeichen in seinem Passwort haben will? Oder wenn er einen Titel fuer einen Blog-Eintrag oder ne Support-Mail in ein Formular eingibt? Versuch nicht zu verhindern, dass ein Benutzer
SQL-Queries mitschickt. Verhindere, dass diese zur Ausfuehrung kommen, indem du Quotes usw. unschaedlich machst (siehe obige Funktion)
Was hat htmlspecialchars() damit zu tun? Stell dir sowas vor:
Code:
$username = $_GET['username'];
// Abfrage
if ($not_exists)
{
echo "Benutzer $username existiert nicht";
}
Und jetzt stell dir fuer $username diese Eingabe vor:
Code:
<script>alert(document.cookie);</script>
Da ist kein Leerzeichen drin, und glaub mir, man kann viel mehr Scheiss mit XSS-Luecken anstellen als nur ein Cookie auszugeben.
Greetz
alcaeus