xss-Attacken
Sabine
- datenbank
Hallo,
bin nun mit xss/dos-Attacken in meinem Formular konfrontiert und
möchte dagegen ein einigermaßenes Maßnahmenpaket schnüren.
Bis jetzt habe ich von folgenden Maßnahmen gelesen:
Kennt ihr noch andere(bessere) Maßnahmen?
Gruß
Moin!
bin nun mit xss/dos-Attacken in meinem Formular konfrontiert und
möchte dagegen ein einigermaßenes Maßnahmenpaket schnüren.
Du brauchst exakt eine Maßnahme: Kontextspezifisches Escaping.
Bis jetzt habe ich von folgenden Maßnahmen gelesen:
- Kritische Zeichen verhindern wie z.B.: "<"
- Zwangsumwandlung von Variablentypen durch eine php-Funktion (was
immer das heißen mag)- Nicht direkt inkluden, sondern:
<?php if($var == "bla") include("bla.php");- dos-captures
Alles schön, aber für eine konkrete Problemstellung gibts in der Regel konkrete Gegenmaßnahmen - nur kennt noch keiner deine konkrete Problemstellung.
Was genau ist denn passiert? Am besten mit Beispielcode und Beispieldaten.
- Sven Rautenberg
bin nun mit xss/dos-Attacken in meinem Formular konfrontiert und
möchte dagegen ein einigermaßenes Maßnahmenpaket schnüren.Du brauchst exakt eine Maßnahme: Kontextspezifisches Escaping.
Zu DOS, hier empfiehlt sich eine schlanke serverseitige Logik, die eingehende Requests in Empfang nimmt und bei Bedarf auch gleich wieder "abserviert". SessionIDs und RequestIDs (FormIDs) kommen in Frage.
echo $begrüßung;
- Kritische Zeichen verhindern wie z.B.: "<"
Sven sprach es ja schon an: Wenn du Daten in einen bestimmten Kontext bringen möchtes musst du sie dem Kontext entsprechend behandeln. Bringst du Daten in den HTML-Kontext - sprich: gibst du sie in ein HTML-Dokument aus - musst du die HTML-eigenen Zeichen beachten. Für eine URL gelten wieder andere Regeln, für SQL-Statement ebenfalls, noch dazu für jedes Datenbank-System eigene, usw. usf. PHP bietet für die gängigsten Fälle bereits Funktionen an, die du nur noch nutzen musst: htmlspecialchars(), url_encode(), mysql_real_escape_string(), usw.
Schwierig für einen Anfänger ist nur, den Kontextwechsel zu erkennen. Dagegen hilft nur, Erfahrung zu sammeln.
- Zwangsumwandlung von Variablentypen durch eine php-Funktion (was
immer das heißen mag)
Wenn du in einem Eingabefeld einen Zahlenwert erwartest, dann prüfe dies, bevor du die Eingabe an andere Prozesse weitergibst. Eingabefelder, bzw. $_GET und $_POST, liefern nämlich generell Strings aus. Mit Zwangsumwandlung sind hier sicher Funktionen wie intval() oder eine Typumwandlung (Typecast) gemeint.
- Nicht direkt inkluden, sondern:
<?php if($var == "bla") include("bla.php");
Oder allgemein gesagt, prüfe deine Eingabewerte gegen eine List der erlaubten und erwarteten Werte, bevor du damit weiterarbeitest.
Beliebt sind auch Zeilenumbrüche in ansonsten einzeiligen Eingabefeldern.
Nichts hindert einen Angreifer, völlig beliebige und unerwartete Daten an deine Scripte zu schicken. Versuche dies im Hinterkopf zu behalten. In der Testphase sollte man versuchen, seine eigenen Script zu Fehlverhalten zu bringen. Teste nicht nur den Gutfall, spiele auch mal Fehler durch. Z.B.: Gib alle möglichen und unmöglichen Sonderzeichen in deine Eingabefelder ein und teste, ob dein Script so robust ist, sich davon nicht irritieren zu lassen. Wenn du das nicht machst, macht es garantiert früher oder später jemand anderes.
echo "$verabschiedung $name";