jQuery的val()和prop()方法是否为html-escape值?

时间:2012-05-15 15:46:46

标签: jquery html escaping

我在关于val()prop()以及转义的文档中找不到任何内容。

用作setter时,它们是否打算转义值?

3 个答案:

答案 0 :(得分:24)

不是真的。 .val()用于设置表单字段的value属性,因此在那里不需要转义。您将通过DOM设置值,因此它不像您通过字符串连接构建HTML。另一方面,.prop()甚至根本不与属性交互 - 只是DOM属性,所以你不需要处理HTML转义它们。


编辑:为了澄清,我假设你问这个是因为你担心.prop().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节点。字符串本身不会被转义 - 它只是不被解释为标记。它只是一个字符串,就是这样。

答案 1 :(得分:8)

他们期望字符串,而不是HTML。你不需要逃避任何事情。

方法本身也没有进行任何转义,它们使用的底层DOM API也处理字符串,而不是HTML。

一旦你开始使用JavaScript,你几乎不需要担心HTML语法,我能想到的唯一例外是处理innerHTML属性,该属性明确处理(de)将DOM与HTML串行化

答案 2 :(得分:0)

我只想补充一点,在属性中插入值时会产生副作用,这可能会导致代码执行。这些包括image src属性,可用于xss。请参阅:https://www.owasp.org/index.php/Script_in_IMG_tags