我的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, '<').replace(/>/g, '>').replace(/'/g, ''').replace(/"/g, '"');
}
然后你会在输入值中看到"javascript:alert(document.cookie)
,这不是我想要的。
使用jQuery 1.5.2我想我的问题是jQuery.val()
是否为您处理HTML实体,因此被认为是安全的?
答案 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的上下文中呈现它。如果重新显示发生在不同用户的上下文中,则它为恶意用户创建了将数据输入文本框的机会,以便在将来某个时间访问其他用户私人信息。