我有一个HTML页面,其中包含一个dropdownlist。
<html>
<body>
<select>
<option >1</option>
<option >2</option>
<option >3</option>
<option ><script>alert('XSS')</script></option>
</select>
</body>
</html>
在Chrome中,选择框不会打开。
当我在FireFox中打开它时,下拉列表会打开,但在Chrome中不会。
小提琴链接:http://jsfiddle.net/nghiadthp/3mpmkfr8/
最佳答案
Chrome具有一项功能,可以通过在Chrome(图标)>属性目标路径中设置此标志来关闭此功能:
...ome.exe" --disable-web-security
尽管如此,您要尝试的将受此物品的影响:
https://developer.chrome.com/extensions/contentSecurityPolicy
CSP 2级通过允许您使用加密随机数(使用一次的数字)或哈希将特定的内联脚本列入白名单,从而为内联脚本提供了向后兼容性。
因此,您可能想创建一个具有
"unsafe-inline"
属性的.json manifest,该属性具有在SHA256中转换的准确(未转义)的script
<script>alert('XSS')</script> // >> convert it to SHA256
内容安全性政策:script-src'sha256-sha256-41f152968d8d75de3055b59b194f3a5a993b65b06c1586d7dda9d73be115271d'
或使用
nonce
属性:<script nonce=a3afdc68d2731d5187f58e833610c951>alert('XSS')</script>
必须与清单的script-src相匹配:
内容安全政策:script-src'nonce-a3afdc68d2731d5187f58e833610c951'
https://developer.chrome.com/extensions/contentSecurityPolicy
https://developer.chrome.com/extensions/manifest
https://w3c.github.io/webappsec/specs/content-security-policy/
http://www.html5rocks.com/en/tutorials/security/content-security-policy/
因此,Chrome不允许您对内联
script
执行预期的操作(使用
<span>
测试,它将起作用!)不知道自己在做什么疯狂。
顺便说一句,
option
标记中不允许有任何元素(无论是否转义),因此Chrome真的很聪明。特别是关于XSS预防。