Wie kann ich Anführungszeichen in HTML-Attributen richtig maskieren?

Lesezeit: 5 Minuten

Wie kann ich Anfuhrungszeichen in HTML Attributen richtig maskieren
Chris

Ich habe ein Dropdown-Menü auf einer Webseite, das kaputt geht, wenn die Wertzeichenfolge ein Zitat enthält.

Der Wert ist "asdaber im DOM erscheint es immer als leerer String.

Ich habe auf jede mir bekannte Weise versucht, die Zeichenfolge richtig zu entkommen, aber ohne Erfolg.

<option value=""asd">test</option>
<option value="\"asd">test</option>
<option value="&quot;asd">test</option>
<option value="&#34;asd">test</option>

Wie rendere ich dies auf der Seite, damit die Postback-Nachricht den richtigen Wert enthält?

  • Wie generierst du die Seite?

    – SLaks

    25. Oktober 2010 um 14:11 Uhr

  • Was ist, wenn Sie einfache Anführungszeichen verwenden?

    – Wim ten Brink

    25. Oktober 2010 um 14:11 Uhr

  • Ich muss darauf hinweisen, dass keine dieser Antworten sagt, wie man Zeichenfolgen für die Verwendung in HTML-Attributen richtig maskiert

    – Rekonbot

    6. Februar 2013 um 18:46 Uhr

  • @reconbot Das würde davon abhängen, wie der HTML-Code generiert wurde. Bei der Frage ging es um Anführungszeichen, also beantwortet die akzeptierte Antwort technisch gesehen die gestellte Frage. Wie man Zeichenfolgen richtig maskiert, ich habe keinen Link für den allgemeinen Fall zur Hand, aber in PHP würden Sie ihn verwenden htmlentities.

    – Matt Browne

    25. Februar 2013 um 16:50 Uhr

  • Mögliches Duplikat von Anführungszeichen in HTML-Eingabewerten

    – Ciro Santilli 新疆再教育营六四事件法轮功郝海东

    28. Juli 2014 um 16:24 Uhr

1646253126 840 Wie kann ich Anfuhrungszeichen in HTML Attributen richtig maskieren
Andi E

&quot; ist der richtige Weg, der dritte Ihrer Tests:

<option value="&quot;asd">test</option>

Sie können sehen, wie dies unten oder auf funktioniert jsFiddle.

alert($("option")[0].value);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select>
  <option value="&quot;asd">Test</option>
</select>

Alternativ können Sie den Attributwert mit einfachen Anführungszeichen begrenzen:

<option value=""asd">test</option>

  • Die vierte Option von OP, ", ist auch eine gültige Möglichkeit, Anführungszeichen zu maskieren. Die Verwendung numerischer HTML-Entitäten gegenüber benannten Entitäten hat den Vorteil, dass benannte Entitäten nicht alle Zeichen abdecken, während numerische Entitäten dies tun. Die vollständige HTML4-Liste finden Sie unter w3.org/TR/html4/sgml/entities.html .

    – ank

    25. Oktober 2010 um 14:42 Uhr

  • @atk: ja, &quot; wird dem gleichen Zeichen zugeordnet wie &#34;aber es gibt keinen Vorteil, hier die numerische Option zu verwenden, weil &quot; ist eine definierte benannte Entität. &quot; ist auch leichter zu merken.

    – Andi E

    25. Oktober 2010 um 14:45 Uhr

  • Ich stimme zu. In diesem speziellen Fall ist es einfacher, " zu verwenden. Ich wollte nur auf den allgemeinen Fall hinweisen.

    – ank

    25. Oktober 2010 um 17:05 Uhr


  • @SIDU: ändere es in &amp;quot;a (ersetze das & mit &amp;)

    – Andi E

    3. Januar 2017 um 13:52 Uhr

  • ^ Endlosschleife

    – Omar Meky

    1. Februar 2017 um 17:36 Uhr

Wenn Sie PHP verwenden, versuchen Sie es mit Aufrufen htmlentities oder htmlspecialchars Funktion.

  • Es reicht vielleicht nicht aus, sie nur zu benutzen, versuchen Sie es <option value='<?php echo htmlentities("' onmouseover='alert(123);' foo='"); ?>' /> – Stellen Sie sicher, dass Sie es mit ENT_QUOTES verwenden, das 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 benutze diesen Wrapper seit Jahren: function hhb_tohtml(string $str):string { return htmlentities($str, ENT_QUOTES | ENT_HTML401 | ENT_SUBSTITUTE | ENT_DISALLOWED, 'UTF-8', true); }

    – Hansenrik

    23. Dezember 2019 um 0:08 Uhr

1646253126 25 Wie kann ich Anfuhrungszeichen in HTML Attributen richtig maskieren
aij

Pro HTML-Syntaxund selbst HTML5sind die folgenden alle gültigen Optionen:

<option value="&quot;asd">test</option>
<option value="&#34;asd">test</option>
<option value=""asd">test</option>
<option value="&quot;asd">test</option>
<option value="&#34;asd">test</option>
<option value=&quot;asd>test</option>
<option value=&#34;asd>test</option>

Beachten Sie, dass, wenn Sie verwenden XML-Syntax die Anführungszeichen (einfach oder doppelt) sind erforderlich.

Hier ist eine jsfiddle, die alle oben genannten Funktionen zeigt.

Eine andere Möglichkeit besteht darin, doppelte Anführungszeichen durch einfache Anführungszeichen zu ersetzen, wenn es Ihnen nichts ausmacht. Aber das hier erwähne ich nicht:

<option value=""asd">test</option>

Ich erwähne diesen:

<option value="'asd">test</option>

In meinem Fall habe ich diese Lösung verwendet.

1646253127 950 Wie kann ich Anfuhrungszeichen in HTML Attributen richtig maskieren
Andreas

Wenn Sie JavaScript verwenden und Lodashdann können Sie verwenden _.Flucht()die entkommt ", ', <, >und &.

1646253127 624 Wie kann ich Anfuhrungszeichen in HTML Attributen richtig maskieren
Jim Manico

Sie sollten wirklich nur nicht vertrauenswürdige Daten in eine Whitelist mit guten Attributen zulassen wie: align, alink, alt, bgcolor, border, cellpadding, cellpacing, class, color, cols, colspan, coords, dir, face, height, hspace, ismap, lang , marginheight, marginwidth, multiple, nohref, noresize, noshade, nowrap, ref, rel, rev, rows, rowspan, scrolling, shape, span, summary, tabindex, title, usemap, valign, value, vlink, vspace, width

Sie möchten wirklich nicht vertrauenswürdige Daten von Javascript-Handlern sowie ID- oder Namensattributen fernhalten (sie können andere Elemente im DOM überschreiben).

Auch wenn Sie nicht vertrauenswürdige Daten in ein SRC- oder HREF-Attribut einfügen, dann ist es wirklich eine nicht vertrauenswürdige URL, also sollten Sie die URL validieren, sicherstellen, dass es sich NICHT um eine Javascript-URL handelt, und dann eine HTML-Entität codieren.

Mehr Details zu all dem gibt es hier: https://www.owasp.org/index.php/Abridged_XSS_Prevention_Cheat_Sheet

915870cookie-checkWie kann ich Anführungszeichen in HTML-Attributen richtig maskieren?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy