从查询字符串中读取Javascript / jQuery XSS的潜力

时间:2011-05-07 14:34:15

标签: javascript jquery xss html-entities

我的javascript从查询字符串中读取数据,并使用jQuery.val()将该数据放入文本框中。

这样可以正常工作,但我想知道XSS攻击是否安全?

说查询字符串看起来像......

site.com?q="javascript:alert(document.cookie)

哪种方式有效:

jQuery.val('"javascript:alert(document.cookie)')

根据我在IE8 / firefox中测试的内容,这会将输入值设置为可见,并且不会进行实际注入。

如果我首先在字符串上运行此函数:

function htmlEncode(str) {
    return str.replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/'/g, '&#039;').replace(/"/g, '&quot;');
}

然后你会在输入值中看到&quot;javascript:alert(document.cookie),这不是我想要的。

使用jQuery 1.5.2我想我的问题是jQuery.val()是否为您处理HTML实体,因此被认为是安全的?

1 个答案:

答案 0 :(得分:8)

鉴于以下内容:

jQuery("#SomeTextbox").val("new value for SomeTextbox")

val函数的jQuery代码只是这样做:

this.value = "new value for SomeTextbox";

其中this是对DOM中Text对象的引用,该对象表示ID为“SomeTextbox”的文本框。字符串"new value for SomeTextbox"存储为该DOM对象的value属性。它不会以任何方式变换或消毒。但它也不会被JavaScript引擎解析/解释(例如,与InnerHTML一样)。所以不管你对val的论证是什么,它都不会“做”任何事情。它只是更改DOM中对象的字符串属性的值。所以,是的,这将是安全的。

修改

以下是您可能会发现有用的其他信息。

一般情况下,只要在文本框中保持,就可以将某些内容放入文本框中,无论它出现多么恶意,无论它是如何到达的,都是“安全的”。但它从那里开始很重要。

如果随后在解析的HTML流中呈现文本框的内容,则它不再安全。常见的情况是将文本框的内容存储在数据库中,然后在以后检索它并在浏览器解析为HTML的上下文中呈现它。如果重新显示发生在不同用户的上下文中,则它为恶意用户创建了将数据输入文本框的机会,以便在将来某个时间访问其他用户私人信息。