2012-05-15 13 views

Antwort

19

Nicht wirklich. .val() wird verwendet, um das Attribut value eines Formularfelds festzulegen, daher ist ein Escaping dort nicht wirklich notwendig. Sie werden den Wert über das DOM festlegen, also ist es nicht so, dass Sie HTML über die String-Verkettung konstruieren. .prop(), auf der anderen Seite, interagiert überhaupt nicht mit Attributen - nur DOM-Eigenschaften, so dass Sie nicht arbeiten müssen, um HTML entweichen.


Edit: aus Gründen der Klarstellung, ich gehe davon aus, dass Sie dies zu fragen, weil Sie besorgt sind über .prop() oder .val() als XSS Angriffsvektor (oder auch nur eine Gelegenheit, sich in den Fuß zu schießen) Wenn dies der Fall ist, müssen Sie sich daran erinnern, dass beim Festlegen von Attributen und Eigenschaften über das DOM die von Ihnen festgelegten Werte im Wesentlichen zu dem Attribut oder dem Wert, mit dem Sie interagiert haben, sandboxiert sind. Zum Beispiel mit dem folgenden:

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

Und Sie haben versucht, einen Attributwert zu missbrauchen, wie zum Beispiel:

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

Sie könnten befürchten, dass dies in etwa wie folgt ergeben würde:

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

Dies wird jedoch nie passieren. Sie werden in der Tat ein rel Attribut mit der bösartigen Zeichenfolge als Wert haben, 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 Saite und das war's.

+1

Also, den 'Wert' eines Elementes auf' böse'-Zeichenkette zu setzen, konnte * nie * Probleme verursachen? –

+1

Richtig - jede Gefahr wäre in Bezug auf das, was Sie mit dem Wert tun, nachdem Sie ihn aus dem Element abgerufen haben. Dies setzt auch voraus, dass Sie es über '.val()' oder eine andere von DOM API unterstützte Methode setzen. Ich habe meine Antwort nur um einige Erläuterungen erweitert. – jmar777

+0

@ jmar777 Ist das gleiche für die jquery .attr() -Methode zum Festlegen der src eines Bildes? d. h. $ ("# profile_pic"). attr ('src', profile_image); muss ich mir Sorgen machen, die Variable profile_image hier zu verschlüsseln? wenn ich versuche, es mit ESAPI encodeForHTMLAttribute() zu kodieren, funktioniert es sowieso nicht, also ich rate ich nicht brauchen? danke – Sarah

6

Sie erwarten Strings, nicht HTML. Du musst nichts entkommen.

Die Methoden selbst entweichen auch nicht, die zugrundeliegenden DOM-APIs, die sie verwenden, handeln auch in Strings, nicht in HTML.

Sobald Sie anfangen, JavaScript zu verwenden, müssen Sie sich fast nie um die HTML-Syntax kümmern. Die einzige Ausnahme, die mir einfällt, ist die innerHTML-Eigenschaft, die sich explizit mit (de) serialisierung des DOM zu und von HTML befasst.

+0

Es ist wahrscheinlich wert zu klären, dass die zugrunde liegenden DOM-APIs auch nichts wirklich entgehen. Wenn Sie Attribut- und Eigenschaftswerte festlegen, erstellen Sie keine neuen Markup- oder DOM-Knoten oder Ähnliches, daher ist das Entkommen kein Problem. – jmar777

+0

@Quentin. Ist das für die jquery .attr() Methode zum Setzen der src eines Bildes gleich? d. h. $ ("# profile_pic"). attr ('src', profile_image); muss ich mir Sorgen machen, die Variable profile_image hier zu verschlüsseln? wenn ich versuche, es mit ESAPI encodeForHTMLAttribute() zu kodieren, funktioniert es sowieso nicht, also ich rate ich nicht brauchen? Danke – Sarah

0

Ich möchte nur hinzufügen, dass Sie sich sorgen müssen, wenn Sie Werte in Attribute mit Nebenwirkungen einfügen, die Codeausführung verursachen können. Dazu gehört das image src-Attribut, das für xss verwendet werden kann. Siehe: https://www.owasp.org/index.php/Script_in_IMG_tags