Raketenwilli: Nein, das ist NICHT richtig. (Nachtrag)

Beitrag lesen

…zusammenfassend ist also festzuhalten:

  1. für Passwörter genügt trim() da es sowieso gehashed wird?

  2. …bei usernames beschleicht mich allerdings tatsächlich ein schlechtes Gefühl, würde ich sie as is (analog zu den Passwörtern) abspeichern, da ich dann ja sozusagen Bomben in meiner Datenbank liegen hätte, die bei vielleicht zukünftigen Queries ohne escape/prepared Statements jederzeit hochgehen könnten 😪

Nein! Das ist NICHT richtig.

Alle Date werden bei JEDEM Kontextwechsel entsprechend des neuen Kontextes behandelt.

  • Bei DB-Queries ist zu escapen,
  • bei Ausgaben ins HTML ist htmlspecialchars richtig.

Und das jedesmal wieder.

Ausnahmen sind allenfalls erwartete Zahlenwerte, die entweder mit Funktionen wie is_numeric() als Zahlen bewiesen sind oder bei denen die Eigenschaft „ist Zahl“ vermittels boolval(), intval() oder floatval() als solche erzwungen wurde.

Immer wenn Werte aus Quellen stammen, die man nicht zu 100% unter eigener Kontrolle hat, ist zu prüfen und ggf. zu entsprechend des neuen Kontextes escapen.

Beispiel für „nicht zu 100% unter eigener Kontrolle“:

Es wird eine Adressverwaltung „HorstsSuperAddr" (Name gewillkürt) als Libary eingebunden. Die Daten stammen von Drittquellen (Userinput ist nur eine von vielen Möglichkeiten). Bisher war in der Datenbank das Feld für Hausnummer eine Zahl. Resultierende Annahme: „Die Datenbank liefert Hausnummer als ganze Zahlen denn sie kann als Hausnummer nur solche speichern.“

… Bis zum Update auf Version 08.15:

Nach Hinweisen auf Probleme beim Import wird von den Autorer die Libary „HorstsSuperAddr" geändert. Das Datenbankfeld ist jetzt vom Typ Text, damit nicht nur die Hausnummer 6 sondern auch „6A“ gespeichert werden kann.

Folge: Die Werte aus der Datenbank müssen ab sofort wie Text behandelt werden, bei Ausgaben Richtung Browser also durch htmlspecialchars() laufen.

Sonst kann jemand nach Übermittlung der angeblichen Hausnummer

7 <script>location.href="https://downloads.kleinweich.ru";</script>`

seinen Marketingerfolg feiern, denn dort gibt's keine vegane Kuscheltiere - was vermuten lässt, das sodann „längst nicht alle Benutzer der Webseite erfreut sein werden“.