我的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, '"'); }
然后你在字面上看到"javascript:alert(document.cookie)
输入值不是我想要的.
使用jQuery 1.5.2我想我的问题是jQuery.val()
为你处理HTML实体,因此被认为是安全的吗?
鉴于以下内容:
jQuery("#SomeTextbox").val("new value for SomeTextbox")
该val
函数的jQuery代码只是这样做:
this.value = "new value for SomeTextbox";
where this
是Text
对DOM中对象的引用,该对象表示具有id"SomeTextbox"的文本框.该字符串"new value for SomeTextbox"
存储value
为该DOM对象的属性.它不会以任何方式变换或消毒.但它也不会被JavaScript引擎解析/解释(例如,它会InnerHTML
).所以不管你的论点val
是什么,它都不会"做"任何事情.它只是更改DOM中对象的字符串属性的值.所以,是的,这将是安全的.
编辑:
以下是一些您可能会发现有用的其他信息.
一般来说,无论文本框中出现多么恶意,将内容放入文本框中,无论文本框如何,只要它保留在文本框中,它就是"安全的" .但它从那里开始很重要.
如果随后在解析的HTML流中呈现文本框的内容,则它不再安全.常见的情况是将文本框的内容存储在数据库中,然后在以后检索它并在浏览器解析为HTML的上下文中呈现它.如果重新显示在不同用户的上下文中发生,则它为恶意用户创建机会以将数据输入到文本框中以便在将来某个时间获得对另一用户私人信息的访问.