如何防止java中的javascript注入

Posted

技术标签:

【中文标题】如何防止java中的javascript注入【英文标题】:how to prevent javascript injection in java 【发布时间】:2017-05-19 04:11:14 【问题描述】:

我有一个富文本区域,用户可以在其中输入内容。我正在尝试使用以下正则表达式来防止 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】:

如果你想删除 "on" 和标签末尾的所有内容,你可以使用这个: .replaceAll("(?i)(<.>?\s+)on.?(>.*?)", "$1$2");

这会将“ACD”呈现为“ACD”。但是请注意,如果有人在脚本中放置了一个“>”字符,它会弄乱正则表达式...

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

【讨论】:

JSoup 从 HTML 中删除属性。它是否也适用于纯文本。示例:它确实适用于“我喜欢这个网站,因为 教会了我很多东西” 它只接受文本......但它可能会做一些你不想要的事情:它完全删除了 标签(它不应该在文本中)并添加了一个换行符当我用

尝试它时。您是否考虑过转义 html(包括 javascript)而不是删除它?

以上是关于如何防止java中的javascript注入的主要内容,如果未能解决你的问题,请参考以下文章

防止 Javascript 中的 HTML 和脚本注入

java web如何防止html,js注入

SpringMVC如何有效的防止XSS注入?

防止 Java 程序中的 SQL 注入攻击

MongoDB 中的 JavaScript NoSQL 注入预防

v-html防止XSS注入