我有一个简单的网页,它接收查询项目并将它们制作到页面中.示例网址:
http://quir.li/player.html?media=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D0VqTwnAuHws
Run Code Online (Sandbox Code Playgroud)
然后该页面的URL显示在页面的某个位置:
<span id="sourceUrlDisplay">http://www.youtube.com/watch?v=0VqTwnAuHws</span>
Run Code Online (Sandbox Code Playgroud)
我觉得如果页面加载了包含类似内容的URL,这会使页面容易受到XSS的攻击
http://quir.li/player.html?media=<script>alert('test')</script>
Run Code Online (Sandbox Code Playgroud)
我发现,将URL呈现为<pre>标记并没有帮助.有没有一个简单的解决方案,就像一个HTML标签,其内容真的没有被解释,只是打印出来?
不,HTML中没有这样的标签可以防止XSS攻击,并且不可能制作一个.我们假设有一个这样的标签,比如说<safe>.攻击者只需关闭它:</safe><script> malicious code </script><safe>.
在这种特定情况下停止XSS的方法是将特殊字符转义为它们的URL编码对应物,这样http://quir.li/player.html?media=<script>alert('test')</script>就变成了 http://quir.li/player.html?media=%3Cscript%3Ealert('test')%3C%2Fscript%3E.