背景:修補Http請求中夾帶script攻擊的
apache自帶的防止XSS攻擊的util:StringEscapeUtils,但是不能替換script(攻擊者會使用不同方式的大小寫組合)
public static void main(String[] args) {
String str = "<sCript>HTTP://www</sCripT>.<script>for</SCRIPT>ta.</SCripT>com/.";
String temp = str.toLowerCase(); //先轉換成小寫進行精確匹配
Set<String> senSet= new HashSet<String>();
senSet.add("</script>");
senSet.add("<script>");
for(String regex:senSet) {
if(temp.contains(regex)) {
temp = temp.replaceAll(regex, "");
}
}
System.err.println(temp);
for(String regex:senSet) {
//不區分大小寫匹配
Pattern pattern = Pattern.compile(regex,Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(str);
//不區分大小寫匹配
while (matcher.find()) {
//截取字符串,臨時保存匹配到的字符串
//起始位置和結束位置都要加一個len長度
String match = str.substring(matcher.start(), matcher.end());
//替換首次找到的字符串(替換成同等長度的小寫)
str = str.replaceFirst(match, regex);
}
}
System.out.println("*********"+str);
for(String key:senSet) {
str = str.replaceAll(key, "");
}
System.out.println("======="+str);