2010-02-25 9 views
11

Durch einfache folgende ("die großen 5") umzuwandeln:Verhindert die HTML-Codierung XSS-Sicherheitsexploits?

& -> & 
< -> &lt; 
> -> &gt; 
" -> &#034; 
' -> &#039; 

Werden Sie XSS-Angriffe zu verhindern?

Ich denke, Sie müssen auch auf einer Zeichenebene Whitelist, um zu verhindern, certain attacks, aber die following answer Staaten es kompliziert Probleme.

BEARBEITEN Diese page Details it does not prevent more elaborate injections, does not help with "out of range characters = question marks" when outputting Strings to Writers with single byte encodings, nor prevents character reinterpretation when user switches browser encoding over displayed page. Im Wesentlichen nur entkommen diese Zeichen scheint eine ziemlich naive Ansatz.

+1

... sagt Wikipedia „Es ist erwähnenswert, dass, obwohl es allgemein empfohlen wird, einfach HTML-Entity-Codierung durchführen auf Die fünf signifikanten XML-Zeichen reichen nicht immer aus, um viele XSS-Formen zu verhindern. Die Codierung kann schwierig sein, und die Verwendung einer Sicherheitscodierungsbibliothek wird dringend empfohlen. " und zitiert diesen Artikel, obwohl ich nicht finden kann, was in diesem Artikel die Aussage rechtfertigt: http://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet –

+1

Es ist nur schwierig, wenn Sie nicht was wissen du machst oder machst es an verschiedenen (falschen) Orten. Sei einfach im Einklang damit. Alle benutzergesteuerten Eingaben (Anfrage-URL, Anfrage-Parameter, Anfragetext, etc..etc .. alles, was vom Benutzer stammt) nur einmal während der (Wieder-) Anzeige in der Ansichtsschicht codieren. Das ist alles. – BalusC

+0

Hey Pool - Sind Sie bereit, die bevorzugte Antwort zu ändern? Die Antwort von @bobince ist besser und hat mehr Upvotes. – nslntmnx

Antwort

9

Verhindern Sie XSS-Angriffe?

Wenn Sie diese zur richtigen Zeit zu entkommen (*), dann ja, werden Sie HTML-Injektion zu verhindern. Dies ist die häufigste Form von XSS-Angriffen. Es ist nicht nur eine Frage der Sicherheit, Sie müssen die Escapes trotzdem ausführen, damit Strings mit diesen Zeichen trotzdem korrekt angezeigt werden. Das Thema Sicherheit ist eine Teilmenge der Frage der Korrektheit.

Ich glaube, Sie auf einer Zeichenebene weiße Liste müssen auch bestimmte Angriffe zu verhindern

Nr HTML-escaping jeden dieser Angriffe als inaktiv Klartext auf der Seite machen wird, die ist was du willst. Die Palette der Angriffe auf dieser Seite demonstriert verschiedene Möglichkeiten der HTML-Injection, die die dümmeren "XSS-Filter" umgehen können, die einige Server bereitstellen, um häufige Angriffe durch HTML-Injection zu verhindern. Dies zeigt, dass "XSS-Filter" von Natur aus undicht und ineffektiv sind.

Es gibt andere Formen von XSS-Angriff, die Sie nicht beeinflussen könnten oder könnten, beispielsweise schlechte Systeme auf Benutzer übermittelten URIs (javascript: et al), Injektion von Code in Daten in einen JavaScript-Block hallte (wo man JSON- brauchen Stil-Escaping) oder in Stylesheets oder HTTP-Response-Headern (wiederum benötigen Sie die entsprechende Form der Codierung, wenn Sie Text in einen anderen Kontext einfügen; Sie sollten immer misstrauisch sein, wenn Sie eine unausgearbeitete Interpolation wie PHP's "string $var string" sehen).

Dann gibt es Datei-Upload-Behandlung, Flash-Herkunftsrichtlinie, UTF-8 überlange Sequenzen in älteren Browsern, und Probleme bei der Generierung von Inhalten auf Anwendungsebene; All dies kann potenziell zu Cross-Site-Scripting führen. Aber HTML-Injection ist das Hauptproblem, mit dem jede Webanwendung konfrontiert wird, und die meisten PHP-Anwendungen werden heute falsch dargestellt.

(*: das heißt, wenn Textinhalt in HTML einfügen und zu keiner anderen Zeit keine HTML-Escape-Formularübermittlung Daten in $_POST/$_GET zu Beginn des Skripts, das ist ein gemeinsamer verquer Fehler..)

+0

Und das ist es. – BalusC

4

Gegenmaßnahmen hängen vom Kontext ab, in dem die Daten eingefügt werden. Wenn Sie die Daten in HTML einfügen, wird das Einfügen des HTML-Metazeichens durch Escape-Sequenzen (z. B. Zeichenreferenzen) verhindert.

Aber wenn Sie in einem anderen Kontext (z. B. HTML-Attributwert, der als URL interpretiert wird) haben Sie zusätzliche Meta-Zeichen mit verschiedenen Escape-Sequenzen, mit denen Sie umgehen müssen.