Escape-Werte der Methoden val() und prop() von jQuery?

Lesezeit: 4 Minuten

In der Dokumentation finde ich nichts dazu val() und prop() und entkommen.

Sollen sie Werten entgehen, wenn sie als Setter verwendet werden?

Benutzer-Avatar
jmar777

Nicht wirklich. .val() wird verwendet, um ein Formularfeld zu setzen value Attribut, also ist es dort nicht wirklich notwendig zu maskieren. Sie werden den Wert über das DOM festlegen, es ist also nicht so, als würden Sie HTML durch Zeichenfolgenverkettung erstellen. .prop()hingegen interagiert überhaupt nicht mit Attributen – nur mit DOM-Eigenschaften, sodass Sie sich auch nicht darum kümmern müssen, HTML zu maskieren.


Bearbeiten: Zur Klarstellung gehe ich davon aus, dass Sie dies fragen, weil Sie sich Sorgen machen .prop() oder .val() als XSS-Angriffsvektor (oder nur eine Gelegenheit, sich selbst in den Fuß zu schießen)? Wenn dies der Fall ist, müssen Sie bedenken, dass beim Festlegen von Attributen und Eigenschaften über das DOM die von Ihnen festgelegten Werte im Wesentlichen in einer Sandbox für das Attribut oder den Wert gespeichert werden, mit dem Sie interagiert haben. Zum Beispiel, wenn Folgendes gegeben ist:

<div id="foo"></div>

Und Sie haben versucht, einen Attributwert zu missbrauchen, z. B.:

$('#foo').attr('rel', '"></div><script>alert("bang");</script><div rel="');

Sie könnten befürchten, dass dies zu etwas wie dem Folgenden führen würde:

<div id="foo" rel=""></div><script>alert("bang");</script><div rel=""></div>

Dies wird jedoch niemals passieren. Sie werden in der Tat eine haben rel -Attribut mit dem böse aussehenden String als Wert, aber es werden keine neuen Markup- oder DOM-Knoten erstellt. Die Zeichenfolge selbst wird nicht maskiert – sie wird einfach nicht als Markup interpretiert. Es ist nur eine Zeichenfolge und das war’s.

  • Also Einstellung der value eines Elements zu evil"string könnte noch nie irgendwelche Probleme machen?

    – Matt Fenwick

    15. Mai 2012 um 15:53 ​​Uhr


  • Richtig – jede Gefahr würde sich daraus ergeben, was Sie mit dem Wert tun, nachdem Sie ihn aus dem Element abgerufen haben. Dies setzt auch voraus, dass Sie es über einstellen .val() oder eine andere von der DOM-API unterstützte Methode. Ich habe meine Antwort nur um einige Klarstellungen erweitert.

    – jmar777

    15. Mai 2012 um 15:59 Uhr

  • @ jmar777 Ist es dasselbe für die Methode jquery .attr () zum Festlegen der Quelle eines Bildes? dh $(“#profile_pic”).attr(‘src’, profile_image); Muss ich mir hier Gedanken über die Kodierung der Variablen profile_image machen? Wenn ich versuche, es mit ESAPI encodeForHTMLAttribute() zu codieren, funktioniert es sowieso nicht, also denke ich, dass ich das nicht muss? Danke

    – Sarah

    28. November 2016 um 20:15 Uhr

  • @Sarah das ist richtig, dort muss nicht codiert werden. Der dem src-Attribut zugewiesene Wert wird nicht als Markup interpretiert.

    – jmar777

    30. November 2016 um 20:03 Uhr

  • @Sarah Sorry für die verspätete Antwort, aber Ja, seien Sie sehr vorsichtig beim Generieren von HTML über die Zeichenfolgenverkettung! Das ist absolut ein XSS-Angriffsvektor, wenn nicht auf die Codierung geachtet wird. Ich bin nicht vertraut mit encodeForHTMLAttribute() (sieht so aus, als wäre das ein ColdFusion-Dienstprogramm?), aber ich empfehle, hier weiter zu diesem Thema zu lesen: owasp.org/index.php/…

    – jmar777

    17. Dezember 2016 um 19:23 Uhr

Sie erwarten Strings, kein HTML. Sie müssen nichts entkommen.

Die Methoden selbst machen auch kein Escape, die zugrunde liegenden DOM-APIs, die sie verwenden, behandeln auch Zeichenfolgen, nicht HTML.

Sobald Sie mit der Verwendung von JavaScript beginnen, müssen Sie sich fast nie mehr um die HTML-Syntax kümmern, die einzige Ausnahme, die mir einfällt, ist der Umgang mit der innerHTML -Eigenschaft, die sich explizit mit der (De-)Serialisierung des DOM zu und von HTML befasst.

  • Es ist wahrscheinlich eine Klarstellung wert, dass die zugrunde liegenden DOM-APIs auch nichts wirklich entkommen. Wenn Sie Attribut- und Eigenschaftswerte festlegen, erstellen Sie keine neuen Markup- oder DOM-Knoten oder ähnliches, sodass Escapezeichen kein Problem sind.

    – jmar777

    15. Mai 2012 um 15:50 Uhr

  • @QUentin. Ist es dasselbe für die Methode jquery .attr() zum Festlegen des src eines Bildes? dh $(“#profile_pic”).attr(‘src’, profile_image); Muss ich mir hier Gedanken über die Kodierung der Variablen profile_image machen? Wenn ich versuche, es mit ESAPI encodeForHTMLAttribute() zu codieren, funktioniert es sowieso nicht, also denke ich, dass ich das nicht muss? Danke

    – Sarah

    28. November 2016 um 20:15 Uhr

Ich möchte nur hinzufügen, dass Sie sich Sorgen machen müssen, wenn Sie Werte in Attribute mit Nebenwirkungen einfügen, die zur Ausführung von Code führen können. Dazu gehört das Attribut image src, das für xss verwendet werden kann. Sehen: https://www.owasp.org/index.php/Script_in_IMG_tags

1116860cookie-checkEscape-Werte der Methoden val() und prop() von jQuery?

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

Privacy policy