如何防止java中的javascript注入

时间:2017-01-04 18:45:04

标签: javascript java javascript-injection

我有一个富文本区域,用户可以输入内容。我试图使用以下正则表达式阻止JavaScript注入:

return input == null ? null : input.replaceAll("(?i)<script.*?>.*?</script.*?>", "") // case 1
            .replaceAll("(?i)<.*?javascript:.*?>.*?</.*?>", "") // case 2
            .replaceAll("(?i)<.*?\\s+on.*?>.*?</.*?>", ""); // case 3

上面,input是富文本区域中的文本,我使用此正则表达式来避免可能的JavaScript注入。

问题是案例3.如果用户的文字包含"on",则"on"之前的所有文字都会被移除。

如何使最后一个案例更加严格并避免上述问题?

1 个答案:

答案 0 :(得分:1)

如果要删除“on”以及标记末尾的所有内容,可以使用以下命令: .replaceAll(“(?i)(&lt;。?\ s +)on。?(&gt;。*?)”,“$ 1 $ 2”);

这将“ACD”呈现为“ACD”。但要注意,如果有人提出“&gt;”脚本中的字符,它会搞乱正则表达式...

编辑:我的评论的道理是我不建议自定义解析来删除javascript代码。我建议您熟悉以下问题的答案:Java: Best way to remove Javascript from HTML并且可能使用Jsoup.clean(如果在您的环境中可行)。