XSS预防,最小化实施

时间:2016-04-12 13:12:04

标签: java xss

在我们的项目中,为了防止XSS,我们添加了过滤器(HttpServletFilter),它只是简单地转义了所有出现的"<"和">"在Json(包装用户输入)中,如:

json = json.replace("<", "&lt;").replace(">", "&gt;");

问题是:是否足以保证XSS永远不会发生?

或者(换句话说)你能提供一些在我们的系统中会导致XSS行为的用户输入的例子吗?

更新:由于一些有用的答案,我了解如果用户输入用作href属性的源或直接在javascript中,XSS仍然可能。 例如。如果三角括号已经出现在它们周围潜在用户输入外观的位置。

但我们从不以这种方式使用用户输入数据。 还有其他建议吗?

3 个答案:

答案 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