Sind sie die gleichen wie XML, vielleicht plus das Leerzeichen eins (
)?
Ich habe einige große Listen mit HTML-Escape-Zeichen gefunden, aber ich glaube nicht, dass sie maskiert werden müssen . Ich will wissen , was muss maskiert werden.
Sind sie die gleichen wie XML, vielleicht plus das Leerzeichen eins (
)?
Ich habe einige große Listen mit HTML-Escape-Zeichen gefunden, aber ich glaube nicht, dass sie maskiert werden müssen . Ich will wissen , was muss maskiert werden.
Wenn Sie Textinhalte in Ihr Dokument an einer Stelle einfügen, an der Textinhalte erwartet werden 1 , müssen Sie normalerweise nur dieselben Zeichen wie in XML maskieren . Innerhalb eines Elements umfasst dies nur das kaufmännische Und der Entitäts-Escapezeichen &
und das Elementtrennzeichen für Zeichen kleiner als und größer als <
>
:
& becomes &
< becomes <
> becomes >
Innerhalb von Attributwerten müssen Sie auch das von Ihnen verwendete Anführungszeichen maskieren:
" becomes "
' becomes '
In einigen Fällen kann es sicher sein, das Entkommen einiger dieser Charaktere zu überspringen, aber ich empfehle Ihnen, in allen Fällen allen fünf zu entkommen, um die Wahrscheinlichkeit eines Fehlers zu verringern.
Wenn Ihre Dokumentcodierung nicht alle von Ihnen verwendeten Zeichen unterstützt, z. B. wenn Sie versuchen, Emoji in einem ASCII-codierten Dokument zu verwenden, müssen Sie diese ebenfalls umgehen. Die meisten Dokumente werden heutzutage mit der vollständig Unicode-unterstützenden UTF-8-Codierung codiert, wo dies nicht erforderlich ist.
Im Allgemeinen sollten Sie Leerzeichen nicht als entkommen
.
ist kein normaler Raum, es ist ein nicht brechender Raum . Sie können diese anstelle normaler Leerzeichen verwenden, um zu verhindern, dass ein Zeilenumbruch zwischen zwei Wörtern eingefügt wird, oder um zusätzliches Leerzeichen einzufügen, ohne dass es automatisch reduziert wird. Dies ist jedoch normalerweise ein seltener Fall. Tun Sie dies nur, wenn Sie eine Designbeschränkung haben, die dies erfordert.
1 Mit "einem Ort, an dem Textinhalt erwartet wird" meine ich innerhalb eines Elements oder eines angegebenen Attributwerts, an dem normale Parsing-Regeln gelten. Zum Beispiel: <p>HERE</p>
oder <p title="HERE">...</p>
. Was ich oben geschrieben habe, gilt nicht für Inhalte mit speziellen Analyseregeln oder -bedeutungen, z. B. innerhalb eines Skripts oder eines Style-Tags oder als Element- oder Attributname. Zum Beispiel: <NOT-HERE>...</NOT-HERE>
, <script>NOT-HERE</script>
, <style>NOT-HERE</script>
, oder <p NOT-HERE="...">...</p>
.
In diesen Kontexten sind die Regeln komplizierter und es ist viel einfacher, eine Sicherheitslücke einzuführen. Ich rate Ihnen dringend davon ab, jemals dynamische Inhalte an diesen Orten einzufügen. Ich habe Teams kompetenter sicherheitsbewusster Entwickler gesehen, die Schwachstellen eingeführt haben, indem sie davon ausgegangen sind, dass sie diese Werte korrekt codiert haben, aber keinen Randfall haben. Normalerweise gibt es eine sicherere Alternative, z. B. das Einfügen des dynamischen Werts in ein Attribut und das anschließende Behandeln mit JavaScript.
Lesen Sie gegebenenfalls die XSS-Präventionsregeln des Open Web Application Security-Projekts , um einige der Bedenken zu verstehen, die Sie berücksichtigen müssen.
<p onclick="NOT-HERE">...</p>
und<p style="NOT-HERE">...</p>
.Es kommt auf den Kontext an. Einige mögliche Kontexte in HTML:
Weitere Informationen finden Sie in den Abschnitten " Warum kann ich nicht einfach nicht vertrauenswürdige Daten von HTML-Entitäten codieren? " Und " XSS-Präventionsregeln " im Cross Site Scripting Prevention Cheat Sheet von OWASP . Es ist jedoch am besten, das gesamte Dokument zu lesen.
quelle
Grundsätzlich gibt es drei Hauptzeichen, die in Ihren HTML- und XML-Dateien immer maskiert werden sollten, damit sie nicht mit den restlichen Markups interagieren. Wie Sie wahrscheinlich erwarten, werden zwei davon die Syntax-Wrapper sein, die <sind > sind sie wie folgt aufgeführt:
Wir können auch das doppelte Anführungszeichen (") als" und das einfache Anführungszeichen (') als & apos verwenden
Vermeiden Sie das Einfügen dynamischer Inhalte in
<script>
und.<style>
Diese Regeln gelten nicht für sie. Wenn Sie beispielsweise JSON in a einfügen müssen, ersetzen Sie <durch \ x3c, das Zeichen U + 2028 durch \ u2028 und U + 2029 durch \ u2029 nach der JSON-Serialisierung.)HTML-Escape-Zeichen: Vollständige Liste: http://www.theukwebdesigncompany.com/articles/entity-escape-characters.php
Sie müssen also <oder & entkommen, wenn etwas folgt, das eine Zeichenreferenz beginnen könnte. Auch die Regel für kaufmännisches Und ist die einzige solche Regel für Attribute in Anführungszeichen, da das übereinstimmende Anführungszeichen das einzige ist, das eines beendet. Wenn Sie den Attributwert dort jedoch nicht beenden möchten, entfernen Sie das Anführungszeichen.
quelle
Die genaue Antwort hängt vom Kontext ab. Im Allgemeinen dürfen diese Zeichen nicht vorhanden sein ( HTML 5.2 §3.2.4.2.5 ):
Diese Einschränkungen sind über die Spezifikation verteilt. Beispielsweise dürfen Attributwerte ( §8.1.2.3 ) kein mehrdeutiges kaufmännisches Und enthalten und dürfen entweder (i) leer sein, (ii) in einfachen Anführungszeichen (und dürfen daher kein U + 0027 APOSTROPHE-Zeichen enthalten
'
), (iii) in doppelten Anführungszeichen (. darf kein U + 0022 QUOTATION MARK-Zeichen enthalten"
) oder (iv) nicht zitiert - mit den folgenden Einschränkungen:quelle