避免使用带有<pre>之类的HTML标记的XSS

Mar*_*cel 7 html tags xss pre

我有一个简单的网页,它接收查询项目并将它们制作到页面中.示例网址:

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标签,其内容真的没有被解释,只是打印出来?

注意:这个问题此问题有些类似,但更为一般.

JJJ*_*JJJ 9

不,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.