26

val()andprop()およびエスケープに関するドキュメントには何も見つかりません。

セッターとして使用されたときに値をエスケープすることを意図していますか?

4

3 に答える 3

28

あまり。.val()フォームフィールドのvalue属性を設定するために使用されるため、エスケープは実際には必要ありません。DOMを介して値を設定するため、文字列の連結を介してHTMLを構築しているわけではありません。 .prop()一方、属性とはまったく相互作用しません。DOMプロパティだけなので、HTMLをエスケープする必要はありません。


.prop()編集:明確にするために、XSS攻撃ベクトル(または.val()単に足を撃つ機会)を懸念しているため、またはXSS攻撃ベクトルとしてこれを求めていると思いますか?その場合、DOMを介して属性とプロパティを設定するとき、設定する値は基本的に、操作していた属性または値にサンドボックス化されることを覚えておく必要があります。たとえば、次のようになります。

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

そして、次のような属性値を悪用しようとしました。

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

これにより、次のような結果になるのではないかと心配するかもしれません。

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

ただし、これは決して起こりません。確かにrel、悪意のある文字列を値として持つ属性がありますが、新しいマークアップやDOMノードは作成されません。文字列自体はエスケープされません。単にマークアップとして解釈されないだけです。それはただの文字列であり、それだけです。

于 2012-05-15T15:49:11.930 に答える
8

HTML ではなく文字列が必要です。何もエスケープする必要はありません。

メソッド自体もエスケープを行いません。メソッドが使用する基礎となる DOM API も、HTML ではなく文字列を扱います。

JavaScript を使い始めると、HTML 構文について心配する必要はほとんどありません。私が思いつく唯一の例外はinnerHTML、DOM と HTML の間のシリアル化 (デ) を明示的に処理するプロパティを扱う場合です。

于 2012-05-15T15:48:28.683 に答える