如何在 java 中防止 java 脚本注入
how to prevent javascript injection in java
我有一个富文本区域,用户可以在其中键入内容。我正在尝试使用以下正则表达式来防止 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"
之前的所有文本都会被删除。
如何使最后一种情况更严格,避免上述问题?
如果你想删除 "on" 和标签末尾的所有内容,你可以使用这个:
.replaceAll("(?i)(<.?\s+)on.?(>.*?)", "$1$2");
这将 "ACD" 呈现为 "ACD"。但请注意,如果有人在脚本中放置一个“>”字符,它会弄乱正则表达式...
编辑:我的意思是我不建议使用自定义解析来删除 javascript 代码。我建议您熟悉以下问题的答案:Java: Best way to remove Javascript from HTML 并可能使用 Jsoup.clean(如果在您的环境中可能)。
我有一个富文本区域,用户可以在其中键入内容。我正在尝试使用以下正则表达式来防止 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"
之前的所有文本都会被删除。
如何使最后一种情况更严格,避免上述问题?
如果你想删除 "on" 和标签末尾的所有内容,你可以使用这个: .replaceAll("(?i)(<.?\s+)on.?(>.*?)", "$1$2");
这将 "ACD" 呈现为 "ACD"。但请注意,如果有人在脚本中放置一个“>”字符,它会弄乱正则表达式...
编辑:我的意思是我不建议使用自定义解析来删除 javascript 代码。我建议您熟悉以下问题的答案:Java: Best way to remove Javascript from HTML 并可能使用 Jsoup.clean(如果在您的环境中可能)。