Ich habe ein Dropdown-Menü auf einer Webseite, das unterbrochen wird, wenn die Wertzeichenfolge ein Anführungszeichen enthält.
Der Wert ist "asd
, aber im DOM wird er immer als leere Zeichenfolge angezeigt.
Ich habe alles versucht, um der Schnur richtig zu entkommen, aber ohne Erfolg.
<option value=""asd">test</option>
<option value="\"asd">test</option>
<option value=""asd">test</option>
<option value=""asd">test</option>
Wie rendere ich dies auf der Seite, damit die Postback-Nachricht den richtigen Wert enthält?
htmlentities
.Antworten:
"
ist der richtige Weg, der dritte Ihrer Tests:Sie können dies unten oder auf jsFiddle sehen .
Alternativ können Sie den Attributwert in einfache Anführungszeichen setzen:
quelle
"
demselben Zeichen wie"
, aber die Verwendung der numerischen Option hat keinen Vorteil, da"
es sich um eine definierte benannte Entität handelt."
ist auch leichter zu merken.&quot;a
(ersetzen Sie&
durch&
)Wenn Sie PHP verwenden, versuchen Sie es mit Aufruf
htmlentities
oderhtmlspecialchars
Funktion.quelle
<option value='<?php echo htmlentities("' onmouseover='alert(123);' foo='"); ?>' />
Sie, sie mit ENT_QUOTES zu verwenden. Dies ist sicher:<option value='<?php echo htmlentities("' onmouseover='alert(123);' foo='", ENT_QUOTES); ?>' />
Aber zusätzlich zu ENT_QUOTES sollten Sie auch ENT_SUBSTITUTE und ENT_DISALLOWED hinzufügen. Ich persönlich habe diesen Wrapper seit Jahren verwendet:function hhb_tohtml(string $str):string { return htmlentities($str, ENT_QUOTES | ENT_HTML401 | ENT_SUBSTITUTE | ENT_DISALLOWED, 'UTF-8', true); }
Gemäß HTML-Syntax und sogar HTML5 sind alle folgenden Optionen gültig:
Beachten Sie, dass bei Verwendung der XML-Syntax die Anführungszeichen (einfach oder doppelt) erforderlich sind.
Hier ist eine jsfiddle, die alle oben genannten Funktionen zeigt .
quelle
Eine andere Möglichkeit besteht darin, doppelte Anführungszeichen durch einfache Anführungszeichen zu ersetzen, wenn Sie nichts dagegen haben. Aber ich erwähne diesen nicht:
Ich erwähne dieses:
In meinem Fall habe ich diese Lösung verwendet.
quelle
Wenn Sie Javascript und Lodash verwenden, können Sie _.escape () verwenden, das ", ', <,> und & maskiert.
Siehe hier: https://lodash.com/docs/#escape
quelle
Sie sollten wirklich nur nicht vertrauenswürdige Daten in eine Whitelist mit guten Attributen wie Align, Alink, Alt, BGColor, Border, Cellpadding, Cellspacing, Klasse, Farbe, Cols, Colspan, Coords, Dir, Gesicht, Höhe, Hspace, Ismap, Lang zulassen , marginheight, marginwidth, multiple, nohref, noresize, noshade, nowrap, ref, rel, rev, Zeilen, Zeilenumfang, Scrollen, Form, Spanne, Zusammenfassung, Tabindex, Titel, Usemap, Valign, Wert, Vlink, Vspace, Breite
Sie möchten wirklich nicht vertrauenswürdige Daten von Javascript-Handlern sowie ID- oder Namensattributen fernhalten (sie können andere Elemente im DOM blockieren).
Wenn Sie nicht vertrauenswürdige Daten in ein SRC- oder HREF-Attribut einfügen, handelt es sich tatsächlich um eine nicht vertrauenswürdige URL. Überprüfen Sie daher die URL, stellen Sie sicher, dass es sich NICHT um eine Javascript: URL handelt, und codieren Sie dann die HTML-Entität.
Weitere Details dazu finden Sie hier: https://www.owasp.org/index.php/Abridged_XSS_Prevention_Cheat_Sheet
quelle
Es gibt keine Möglichkeit, Anführungszeichen im Wert eines Eingabetextes zu umgehen ... Sie können jedoch Javascript (oder jquery) verwenden:
quelle