原文:http://www.open-open.com/code/view/1455809388308

public class AntiXSS {
/**
* 滤除content中的危险 HTML 代码, 主要是脚本代码, 滚动字幕代码以及脚本事件处理代码
*
* @param content
* 需要滤除的字符串
* @return 过滤的结果
*/
public static String replaceHtmlCode(String content) {
if (null == content) {
return null;
}
if (0 == content.length()) {
return "";
}
// 需要滤除的脚本事件关键字
String[] eventKeywords = { "onmouseover", "onmouseout", "onmousedown",
"onmouseup", "onmousemove", "onclick", "ondblclick",
"onkeypress", "onkeydown", "onkeyup", "ondragstart",
"onerrorupdate", "onhelp", "onreadystatechange", "onrowenter",
"onrowexit", "onselectstart", "onload", "onunload",
"onbeforeunload", "onblur", "onerror", "onfocus", "onresize",
"onscroll", "oncontextmenu", "alert" };
content = replace(content, "<script", "<script", false);
content = replace(content, "</script", "</script", false);
content = replace(content, "<marquee", "<marquee", false);
content = replace(content, "</marquee", "</marquee", false);
content = replace(content, "'", "_", false);// 将单引号替换成下划线
content = replace(content, "\"", "_", false);// 将双引号替换成下划线
// 滤除脚本事件代码
for (int i = 0; i < eventKeywords.length; i++) {
content = replace(content, eventKeywords[i],
"_" + eventKeywords[i], false); // 添加一个"_", 使事件代码无效
}
return content;
} /**
* 将字符串 source 中的 oldStr 替换为 newStr, 并以大小写敏感方式进行查找
*
* @param source
* 需要替换的源字符串
* @param oldStr
* 需要被替换的老字符串
* @param newStr
* 替换为的新字符串
*/
private static String replace(String source, String oldStr, String newStr) {
return replace(source, oldStr, newStr, true);
} /**
* 将字符串 source 中的 oldStr 替换为 newStr, matchCase 为是否设置大小写敏感查找
*
* @param source
* 需要替换的源字符串
* @param oldStr
* 需要被替换的老字符串
* @param newStr
* 替换为的新字符串
* @param matchCase
* 是否需要按照大小写敏感方式查找
*/
private static String replace(String source, String oldStr, String newStr,
boolean matchCase) {
if (source == null) {
return null;
}
// 首先检查旧字符串是否存在, 不存在就不进行替换
if (source.toLowerCase().indexOf(oldStr.toLowerCase()) == -1) {
return source;
}
int findStartPos = 0;
int a = 0;
while (a > -1) {
int b = 0;
String str1, str2, str3, str4, strA, strB;
str1 = source;
str2 = str1.toLowerCase();
str3 = oldStr;
str4 = str3.toLowerCase();
if (matchCase) {
strA = str1;
strB = str3;
} else {
strA = str2;
strB = str4;
}
a = strA.indexOf(strB, findStartPos);
if (a > -1) {
b = oldStr.length();
findStartPos = a + b;
StringBuffer bbuf = new StringBuffer(source);
source = bbuf.replace(a, a + b, newStr) + "";
// 新的查找开始点位于替换后的字符串的结尾
findStartPos = findStartPos + newStr.length() - b;
}
}
return source;
} public static void main(String [] args){
//String str = "./fabu-advSousuo.jsp?userName=xxx<script>alert(123);</script>&password=yyy";
String str= "http://192.168.63.87:7001/xxx/xxxx/fabu-search.jsp?searchText=<script>alert('11');</script>";
System.out.println(AntiXSS.replaceHtmlCode(str));
}
}

最新文章

  1. SMT 的基本流程?SMT的工艺流程?SMT的设备操作?
  2. SQL语句---nvl 用法
  3. iis浏览网页时提示无法显示 XML 页
  4. JAVA 打印九九乘法表
  5. java console ( mac osx ) 命令行编码
  6. WEB开发者必备的7个JavaScript函数
  7. Windows 8 动手实验系列教程 实验8:Windows应用商店API
  8. d3d纹理参数
  9. C#中值类型与引用类型通俗理解
  10. Date Math SimpleDateFormat 类
  11. Palindrome Number 2015年6月23日
  12. Vagrant下共享目录下静态文件(js/jpg/png等)修改完运行报错
  13. WdatePicker 日期区间设置
  14. 手机访问PC网站自动跳转到手机版
  15. Codeforces-gym-101020 problem C. Rectangles
  16. 10.18号java课后作业代码
  17. spring的bean在什么时候被实例化
  18. SpeechLib 应用
  19. java利用递归实现汉诺塔算法
  20. udp_client.c udp_server.c

热门文章

  1. cluvfy comp命令用法
  2. uva12174 滑动窗口+预处理
  3. HTTP隧道代理
  4. MySQL系列(二)--MySQL存储引擎
  5. 产生多种anchor的代码讲解!很好!
  6. idea java 注释模板配置
  7. java生成随机字符
  8. 微信小程序:errcode=40029和invalid code, hints: [ req_id: VyLhYa0451hb31 ]
  9. 数组合并--php
  10. Ubuntu、CentOS 解决docker命令权限问题(sudo)