javascript - 如何在java中防止javascript注入(inject)

标签 javascript java javascript-injection

我有一个富文本区域,用户可以在其中键入内容。我正在尝试使用以下正则表达式来防止 JavaScript 注入(inject):

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

上面,input 是来自富文本区域的文本,我使用这个正则表达式来避免可能的 JavaScript 注入(inject)。

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

如何使最后一种情况更严格,避免上述问题?

最佳答案

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

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

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

关于javascript - 如何在java中防止javascript注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41471111/

相关文章:

java - 无法通过 Apache POI 3.6 检索数字格式和类别为货币的 Excel 单元格值

java - 如何使用自定义 TypefaceSpan 类更改字体大小

javascript - 与 object.prop 相比,使用 `in` 有什么好处?

javascript - 如何发送多个 XMLHttpRequest

java - Java Sound API 在您的计算机上找到哪些输出和录音端口?

javascript - 注入(inject) Javascript 函数的正确语法

java - 用于保护 java/jsp 的 SQL/javascript 注入(inject)的库

javascript - 没有 'Access-Control-Allow-Origin' header - 相同域?

javascript - 向后遍历不可计算的嵌套数组,节点遍历 - Javascript?