替換字符串中指定字符串(不區分大小寫)

背景:修補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);
        
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章