通过替换所有括号字符

时间:2015-12-19 23:19:36

标签: javascript jsp xss

我使用MongoDB作为后端,这让我相信我不应该担心我的数据库中的XSS。

对于"前端"我通过JSP生成页面。现在,我虔诚地逃避用户生成的内容(应该是纯文本 - 没有Javascript或HTML标签),但我不相信自己100%。

在阅读了一些关于XSS的指示之后,我想知道以下黑客是否会使我的网站失败。

在服务器端消费用户生成的输入时,我想替换用户生成的内容中的所有括号,例如() []。我希望将所有<>符号替换为: 单个左指角度引号:< 单右指角引号:>

现在,我假设没有()<>,编写一个JavaScript XSS几乎是不可能的。

这种黑客行为还是我错过了什么?

1 个答案:

答案 0 :(得分:0)

您在上述评论或问题中陈述或暗示以下内容,转述:

  • 在div数据状态上下文中插入受污染的数据,例如:<div> tainted data here </div>
  • 在嵌套的上下文中插入受污染的数据:JavaScript单/双引号→脚本数据状态:<script>$('#someid').populate($.parseJSON('<%=StringEscapeUtils.escapeEcmaScript‌​(jsonString)%>'));</script>
  • 您将Apache Commons JavaScript字符串escaper StringEscapeUtils.escapeEcmaScript‌​用于上述JavaScript上下文
  • 您将过滤掉<>个字符

鉴于上述情况,我没有看到XSS的任何发生方式。如果您转义<>,那么您的代码might be susceptible to some weirdness将关于脚本数据转义状态。这种奇怪可能会导致XSS。

我建议使用Coverity Security Library Escape.jsString方法转义数据,而不是过滤,该方法会转义<>。 (完全披露:我在Coverity工作并致力于该图书馆。)