在我们的项目中,为了防止XSS,我们添加了过滤器(HttpServletFilter),它只是简单地转义了所有出现的"<"和">"在Json(包装用户输入)中,如:
json = json.replace("<", "<").replace(">", ">");
问题是:是否足以保证XSS永远不会发生?
或者(换句话说)你能提供一些在我们的系统中会导致XSS行为的用户输入的例子吗?
更新:由于一些有用的答案,我了解如果用户输入用作href属性的源或直接在javascript中,XSS仍然可能。 例如。如果三角括号已经出现在它们周围潜在用户输入外观的位置。
但我们从不以这种方式使用用户输入数据。 还有其他建议吗?
答案 0 :(得分:1)
简短回答:不,这还不够
请阅读OWASP XSS Prevention Cheat Sheet,其中解释了可能发生XSS的不同背景。
答案 1 :(得分:1)
不,你不能确定。例如(from here):
<a href="{{anURL}}">
XSS攻击:
anURL = "javascript:alert(1)"
或
<script>var aPage = {{aVar}};</script>
XSS攻击:
aVar = "1;alert(1)"
您还可以在Microsoft或示例实施中找到一些材料,了解如何在Github上做得更好。您可以在security.stackexchange.com找到更详细的答案。
答案 2 :(得分:0)
不幸的是,它还不足以逃脱三角括号。例如,您的网站可能有一些处理用户输入数据的JavaScript代码。有人可能会在用户输入字段中插入恶意内容,并且会直接由您的JavaScript代码执行。恶意数据不需要包含三角括号,因为它直接注入JavaScript。
这篇旧文章是一个很好的起点。 https://support.microsoft.com/en-us/kb/252985