Mik*_*ain 18 html javascript security xss http
说我有以下网页:
<html>
<script>
document.write('querystring=' + location.search.substr(1));
</script>
<html>
Run Code Online (Sandbox Code Playgroud)
我在这样的URL打开它:
http://completely-secure-site/?<script>alert('fsecurity')</script>
Run Code Online (Sandbox Code Playgroud)
在所有尝试的浏览器(Chrome 57,Firefox 52和Safari 10)中,结果是:
查询字符串=%3Cscript%3Ealert(%27fsecurity%27)%3C /脚本%3E
因为尖括号<>
是无效的URL字符,他们似乎得到自动的方式浏览器中编码,才可以拿到附近的JS运行时的任何地方.
这让我相信简单地在客户端上直接渲染查询字符串document.write
总是安全的,而不是可能的XSS向量.(我意识到当然还有许多其他方式可以让应用程序容易受到攻击,但让我们坚持这里描述的精确案例.)
我在这个假设中是否正确?
与问题无关,但有趣的是一边.如果我首先解码URI,那么浏览器的行为是不同的:document.write(decodeURI(location.search.substr(1)));
.Chrome和Safari中的XSS Auditor会阻止该页面,而Firefox会显示警报.