26

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

当用作设置器时,它们是否打算转义值?

4

3 回答 3

28

并不真地。.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 节点。字符串本身没有被转义——它只是没有被解释为标记。它只是一个字符串,就是这样。

于 2012-05-15T15:49:11.930 回答
8

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

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

一旦你开始使用 JavaScript,你几乎不需要担心 HTML 语法,我能想到的唯一例外是在处理innerHTML显式处理(反)序列化 DOM 与 HTML 的属性时。

于 2012-05-15T15:48:28.683 回答
0

我只想补充一点,在属性中插入值时必须担心会导致代码执行的副作用。其中包括可用于 xss 的图像 src 属性。见:https ://www.owasp.org/index.php/Scr​​ipt_in_IMG_tags

于 2017-07-06T00:50:03.340 回答