我有一个富文本区域,用户可以输入内容。我试图使用以下正则表达式阻止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"
之前的所有文字都会被移除。
如何使最后一个案例更加严格并避免上述问题?
答案 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(如果在您的环境中可行)。