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