XXS攻击,HTML代码注入
时间:2019-03-12
本文章向大家介绍XXS攻击,HTML代码注入,主要包括XXS攻击,HTML代码注入使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
针对现在很多企业级开发的同学,避免不了页面进行编辑,或者评论,或者是富文本编辑等操作,只要涉及到这些操作,就要防止非法入侵,下面可以分享一下自己在开发中遇到的这种情况,直接上工具类:
package com.***.****.admin.utils;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class DelHtmlTagUtils {
// 普通输入框的过滤
public static String delHTMLTag(String htmlStr) {
if (htmlStr != null && htmlStr.length() > 0) {
String regExscript = "<script[^>]*?>[\\s\\S]*?<\\/script>"; // 定义script的正则表达式
String regExstyle = "<style[^>]*?>[\\s\\S]*?<\\/style>"; // 定义style的正则表达式
String regExHtml = "<script.*?>.*?</script>"; // 定义转义后script标签的正则表达式
String regExHtml1 = "<script.*?>"; // 定义转义后script标签的正则表达式
String regExHtml2 = "</script>"; // 定义转义后script标签的正则表达式
String regExHtml3 = "script"; // 定义转义后script标签的正则表达式
String regExHtml4 = "javascript";
String regExHtml5 = "eval\\((.*)\\)";
String regExHtml6 = "<[^>]+>";
String regExHtml7 = "<>";
String regExHtml8 = "src[\r\n]*=[\r\n]*\\\'(.*?)\\\'";
String regExHtml10 = "<[^>]*on.*?>";
String regExHtml11 = "</[^>]*on.*>";
String regExHtml13 = "<a[^>]*?>[\\s\\S]*?<\\/a>";
String regExHtml14 = "<iframe[^>]*?>[\\s\\S]*?<\\/iframe>";
String regExHtml15 = "<a.*?>.*?</a>"; // 定义转义后script标签的正则表达式
String regExHtml16 = "<iframe.*?>.*?</iframe>";
Pattern pScript = Pattern.compile(regExscript, Pattern.CASE_INSENSITIVE);
Matcher mScript = pScript.matcher(htmlStr);
htmlStr = mScript.replaceAll(""); // 过滤
Pattern pStyle = Pattern.compile(regExstyle, Pattern.CASE_INSENSITIVE);
Matcher mStyle = pStyle.matcher(htmlStr);
htmlStr = mStyle.replaceAll(""); // 过滤style标签
Pattern pHtml = Pattern.compile(regExHtml, Pattern.CASE_INSENSITIVE);
Matcher mHtml = pHtml.matcher(htmlStr);
htmlStr = mHtml.replaceAll(""); // 过滤转义后script标签
Pattern pHtml1 = Pattern.compile(regExHtml1, Pattern.CASE_INSENSITIVE);
Matcher mHtml1 = pHtml1.matcher(htmlStr);
htmlStr = mHtml1.replaceAll(""); // 过滤转义后script标签
Pattern pHtml2 = Pattern.compile(regExHtml2, Pattern.CASE_INSENSITIVE);
Matcher mHtml2 = pHtml2.matcher(htmlStr);
htmlStr = mHtml2.replaceAll(""); // 过滤转义后script标签
Pattern pHtml3 = Pattern.compile(regExHtml3, Pattern.CASE_INSENSITIVE);
Matcher mHtml3 = pHtml3.matcher(htmlStr);
htmlStr = mHtml3.replaceAll(""); // 过滤script标签
Pattern pHtml4 = Pattern.compile(regExHtml4, Pattern.CASE_INSENSITIVE);
Matcher mHtml4 = pHtml4.matcher(htmlStr);
htmlStr = mHtml4.replaceAll(""); // 过滤javascript标签
Pattern pHtml5 = Pattern.compile(regExHtml5, Pattern.CASE_INSENSITIVE);
Matcher mHtml5 = pHtml5.matcher(htmlStr);
htmlStr = mHtml5.replaceAll(""); // 过滤eval标签
Pattern pHtml6 = Pattern.compile(regExHtml6, Pattern.CASE_INSENSITIVE);
Matcher mHtml6 = pHtml6.matcher(htmlStr);
htmlStr = mHtml6.replaceAll(""); // 过滤html标签
Pattern pHtml7 = Pattern.compile(regExHtml7, Pattern.CASE_INSENSITIVE);
Matcher mHtml7 = pHtml7.matcher(htmlStr);
htmlStr = mHtml7.replaceAll(""); // 过滤html标签
Pattern pHtml8 = Pattern.compile(regExHtml8, Pattern.CASE_INSENSITIVE);
Matcher mHtml8 = pHtml8.matcher(htmlStr);
htmlStr = mHtml8.replaceAll(""); // 过滤html标签
Pattern pHtml10 = Pattern.compile(regExHtml10, Pattern.CASE_INSENSITIVE);
Matcher mHtml10 = pHtml10.matcher(htmlStr);
htmlStr = mHtml10.replaceAll("");
Pattern pHtml11 = Pattern.compile(regExHtml11, Pattern.CASE_INSENSITIVE);
Matcher mHtml11 = pHtml11.matcher(htmlStr);
htmlStr = mHtml11.replaceAll("");
Pattern pHtml13 = Pattern.compile(regExHtml13, Pattern.CASE_INSENSITIVE);
Matcher mHtml13 = pHtml13.matcher(htmlStr);
htmlStr = mHtml13.replaceAll("");
Pattern pHtml14 = Pattern.compile(regExHtml14, Pattern.CASE_INSENSITIVE);
Matcher mHtml14 = pHtml14.matcher(htmlStr);
htmlStr = mHtml14.replaceAll("");
Pattern pHtml15 = Pattern.compile(regExHtml15, Pattern.CASE_INSENSITIVE);
Matcher mHtml15 = pHtml15.matcher(htmlStr);
htmlStr = mHtml15.replaceAll("");
Pattern pHtml16 = Pattern.compile(regExHtml16, Pattern.CASE_INSENSITIVE);
Matcher mHtml16 = pHtml16.matcher(htmlStr);
htmlStr = mHtml16.replaceAll("");
return htmlStr.trim(); // 返回文本字符串
} else {
return htmlStr;
}
}
// 富文本框的过滤
public static String delHTMLTag2(String htmlStr) {
if (htmlStr != null && htmlStr.length() > 0) {
String regExscript = "<script[^>]*?>[\\s\\S]*?<\\/script>"; // 定义script的正则表达式
String regExstyle = "<style[^>]*?>[\\s\\S]*?<\\/style>"; // 定义style的正则表达式
String regExHtml = "<script.*?>.*?</script>"; // 定义转义后script标签的正则表达式
String regExHtml1 = "<script.*?>"; // 定义转义后script标签的正则表达式
String regExHtml2 = "</script>"; // 定义转义后script标签的正则表达式
String regExHtml3 = "script"; // 定义转义后script标签的正则表达式
String regExHtml4 = "javascript";
String regExHtml5 = "eval\\((.*)\\)";
String regExHtml6 = "<[^>]*java.*?>";
String regExHtml7 = "</[^>]*java.*?>";
String regExHtml8 = "<on[^>]*?>[\\s\\S]*?<\\/on>";
String regExHtml9 = "<java[^>]*?>[\\s\\S]*?<\\/java>";
String regExHtml10 = "<[^>]*on.*?>";
String regExHtml11 = "</[^>]*on.*>";
String regExHtml12 = "<java.*?>.*?</java>";
String regExHtml13 = "<a[^>]*?>[\\s\\S]*?<\\/a>";
String regExHtml14 = "<iframe[^>]*?>[\\s\\S]*?<\\/iframe>";
String regExHtml15 = "<a.*?>.*?</a>"; // 定义转义后script标签的正则表达式
String regExHtml16 = "<iframe.*?>.*?</iframe>";
Pattern pScript = Pattern.compile(regExHtml9, Pattern.CASE_INSENSITIVE);
Matcher mScript = pScript.matcher(htmlStr);
htmlStr = mScript.replaceAll(""); // 过滤
Pattern pStyle = Pattern.compile(regExstyle, Pattern.CASE_INSENSITIVE);
Matcher mStyle = pStyle.matcher(htmlStr);
htmlStr = mStyle.replaceAll(""); // 过滤style标签
Pattern pHtml = Pattern.compile(regExHtml, Pattern.CASE_INSENSITIVE);
Matcher mHtml = pHtml.matcher(htmlStr);
htmlStr = mHtml.replaceAll(""); // 过滤转义后script标签
Pattern pHtml1 = Pattern.compile(regExHtml1, Pattern.CASE_INSENSITIVE);
Matcher mHtml1 = pHtml1.matcher(htmlStr);
htmlStr = mHtml1.replaceAll(""); // 过滤转义后script标签
Pattern pHtml2 = Pattern.compile(regExHtml2, Pattern.CASE_INSENSITIVE);
Matcher mHtml2 = pHtml2.matcher(htmlStr);
htmlStr = mHtml2.replaceAll(""); // 过滤转义后script标签
Pattern pHtml3 = Pattern.compile(regExHtml3, Pattern.CASE_INSENSITIVE);
Matcher mHtml3 = pHtml3.matcher(htmlStr);
htmlStr = mHtml3.replaceAll(""); // 过滤script标签
Pattern pHtml4 = Pattern.compile(regExHtml4, Pattern.CASE_INSENSITIVE);
Matcher mHtml4 = pHtml4.matcher(htmlStr);
htmlStr = mHtml4.replaceAll(""); // 过滤javascript标签
Pattern pHtml5 = Pattern.compile(regExHtml5, Pattern.CASE_INSENSITIVE);
Matcher mHtml5 = pHtml5.matcher(htmlStr);
htmlStr = mHtml5.replaceAll(""); // 过滤eval标签
Pattern pHtml6 = Pattern.compile(regExHtml6, Pattern.CASE_INSENSITIVE);
Matcher mHtml6 = pHtml6.matcher(htmlStr);
htmlStr = mHtml6.replaceAll(""); // 过滤转义后的javascript标签
Pattern pHtml7 = Pattern.compile(regExHtml7, Pattern.CASE_INSENSITIVE);
Matcher mHtml7 = pHtml7.matcher(htmlStr);
htmlStr = mHtml7.replaceAll(""); // 过滤转义后的javascript标签
Pattern pHtml8 = Pattern.compile(regExHtml8, Pattern.CASE_INSENSITIVE);
Matcher mHtml8 = pHtml8.matcher(htmlStr);
htmlStr = mHtml8.replaceAll(""); // 过滤on标签
Pattern pHtml9 = Pattern.compile(regExscript, Pattern.CASE_INSENSITIVE);
Matcher mHtml9 = pHtml9.matcher(htmlStr);
htmlStr = mHtml9.replaceAll("");
Pattern pHtml10 = Pattern.compile(regExHtml10, Pattern.CASE_INSENSITIVE);
Matcher mHtml10 = pHtml10.matcher(htmlStr);
htmlStr = mHtml10.replaceAll("");
Pattern pHtml11 = Pattern.compile(regExHtml11, Pattern.CASE_INSENSITIVE);
Matcher mHtml11 = pHtml11.matcher(htmlStr);
htmlStr = mHtml11.replaceAll("");
Pattern pHtml12 = Pattern.compile(regExHtml12, Pattern.CASE_INSENSITIVE);
Matcher mHtml12 = pHtml12.matcher(htmlStr);
htmlStr = mHtml12.replaceAll("");
Pattern pHtml13 = Pattern.compile(regExHtml13, Pattern.CASE_INSENSITIVE);
Matcher mHtml13 = pHtml13.matcher(htmlStr);
htmlStr = mHtml13.replaceAll("");
Pattern pHtml14 = Pattern.compile(regExHtml14, Pattern.CASE_INSENSITIVE);
Matcher mHtml14 = pHtml14.matcher(htmlStr);
htmlStr = mHtml14.replaceAll("");
Pattern pHtml15 = Pattern.compile(regExHtml15, Pattern.CASE_INSENSITIVE);
Matcher mHtml15 = pHtml15.matcher(htmlStr);
htmlStr = mHtml15.replaceAll("");
Pattern pHtml16 = Pattern.compile(regExHtml16, Pattern.CASE_INSENSITIVE);
Matcher mHtml16 = pHtml16.matcher(htmlStr);
htmlStr = mHtml16.replaceAll("");
return htmlStr.trim(); // 返回文本字符串
} else {
return htmlStr;
}
}
}
上面是一个我们写的一个工具类,直接调用在前端输入框可以过滤掉工具类中有写的js,script标签等
下面的工具类也可以复用,具体根据你们自己的业务需求去更改
package ***.***.***.util;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
*
* @author guoyunlong
* @since 2019-3-12
* @version 0.0.1
*/
public class HTMLUtils {
/**
* 过滤所有HTML 标签
* @param htmlStr
* @return
*/
public static String filterHTMLTag(String htmlStr) {
//定义HTML标签的正则表达式
String reg_html="<[^>]+>";
Pattern pattern=Pattern.compile(reg_html,Pattern.CASE_INSENSITIVE);
Matcher matcher=pattern.matcher(htmlStr);
htmlStr=matcher.replaceAll(""); //过滤html标签
return htmlStr;
}
/**
* 过滤标签,通过标签名
* @param htmlStr
* @param tagName
* @return
*/
public static String filterTagByName(String htmlStr,String tagName) {
String reg_html="<"+tagName+"[^>]*?>[\\s\\S]*?<\\/"+tagName+">";
Pattern pattern=Pattern.compile(reg_html,Pattern.CASE_INSENSITIVE);
Matcher matcher=pattern.matcher(htmlStr);
htmlStr=matcher.replaceAll(""); //过滤html标签
return htmlStr;
}
/**
* 过滤标签上的 style 样式
* @param htmlStr
* @return
*/
public static String filterHTMLTagInStyle(String htmlStr) {
String reg_html="style=('|\")(.*?)('|\")";
Pattern pattern=Pattern.compile(reg_html,Pattern.CASE_INSENSITIVE);
Matcher matcher=pattern.matcher(htmlStr);
htmlStr=matcher.replaceAll(""); //过滤html标签
return htmlStr;
}
/**
* 替换表情
* @param htmlStr
* @param tagName
* @return
*/
public static String replayFace(String htmlStr) {
String reg_html="\\[em_\\d{1,}\\]";
Pattern pattern =Pattern.compile(reg_html,Pattern.CASE_INSENSITIVE);
Matcher matcher=pattern.matcher(htmlStr);
if(matcher.find()) {
matcher.reset();
while(matcher.find()) {
String num = matcher.group(0);
String number=num.substring(num.lastIndexOf('_')+1, num.length()-1);
htmlStr = htmlStr.replace(num, "<img src='/face/arclist/"+number+".gif' border='0' />");
}
}
return htmlStr;
}
public static void main(String[] args) {
String html = "<script>alert('test');</script><img src='/face/arclist/5.gif' border='0' /><div style='position:fixs;s'></div><style>body{color:#fff;}</style><Style>body{color:#fff;}</Style><STYLE>body{color:#fff;}</STYLE>";
System.out.println("html="+html);
html = HTMLUtils.filterTagByName(html, "style");
System.out.println("html="+html);
html = HTMLUtils.filterTagByName(html, "script");
System.out.println("html="+html);
html = HTMLUtils.filterHTMLTagInStyle(html);
System.out.println("html="+html);
}
}
- 一加手机系统预装APP被曝存在后门
- 单数据库,多数据库,单实例,多实例不同情况下的数据访问效率测试
- 打造轻量级的实体类数据容器
- “设计应对变化”--实例讲解一个数据同步系统
- TOP语句放到表值函数外,效率异常低下
- 从吉日嘎拉那里学到的……
- 【分享】纯js的n级联动列表框 —— 基于jQuery,支持下拉列表框和列表框,最重要的是n级,当然还有更重要的
- C#中?与??的区别
- 隐藏在程序旮旯中的“安全问题”
- 调用PostgreSQL存储过程,找不到函数名的问题
- C#调用C和C++函数的一点区别
- EF+MySQL乐观锁控制电商并发下单扣减库存,在高并发下的问题
- 合并求取分组记录的第一条数据
- 一个脑洞“颇大”的恶搞链接
- HTML 教程
- HTML 简介
- html div 标签介绍
- html span 标签介绍
- html a 超链接标签
- HTML Br换行标签介绍
- HTML P段落标签介绍
- HTML br与p标签区别
- Html H 标题标签
- html px em pt长度单位
- HTML form 标签
- HTML radio 单选框
- HTML B 加粗标签
- HTML strong加粗粗体标签
- HTML em 强调标签
- HTML i 斜体标签
- HTML u下划线标签
- HTML s 删除线标签
- Html img 图片标签
- Html上标注sup与下标注sub标签
- HTML nobr 禁止换行标签
- HTML hr 水平线标签
- HTML label 标签
- HTML input 标签
- HTML textarea 标签
- HTML select下拉列表标签
- HTML checkbox 多选框
- HTML font color 标签
- HTML iframe 框架标签
- HTML Table 表格
- HTML dl dt dd 标签
- HTML ol li有序列表标签
- HTML ul li 无序列表标签
- HTML 注释
- CSS 教程
- CSS 简介
- CSS 语法
- CSS Id 和 Class选择器
- CSS 样式的创建
- CSS background 背景介绍
- CSS 文本样式
- CSS font 字体
- CSS A 链接
- CSS ul ol列表样式
- CSS TABLE 样式
- CSS 框模型
- CSS border 边框
- CSS Outlines 轮廓
- CSS 外边距 Margin
- CSS Padding 内边距
- CSS 分组和嵌套选择器
- CSS 尺寸 (Dimension)
- CSS Display 属性
- CSS Position 定位
- CSS Float 浮动
- CSS 水平对齐(Horizontal Align)
- CSS 组合选择符
- CSS 伪类
- CSS 伪元素
- CSS 导航栏
- CSS 下拉菜单
- CSS 图片廊
- CSS 图像透明/不透明
- CSS sprite 图像拼合技术
- CSS 媒体类型
- CSS 属性选择器
- CSS 实例
- Android实现简单断点续传和下载到本地功能
- Android用MVP实现一个简单的类淘宝订单页面的示例
- Android Bitmap的截取及状态栏的隐藏和显示功能
- 详解Android沉浸式实现兼容解决办法
- AndroidStudio项目打包成jar的简单方法
- 浅谈React Native打包apk的坑
- Android 设置主题实现点击波纹效果的示例
- 更新Android Studio 3.0碰到的问题小结
- android实现一个图片验证码倒计时功能
- Android添加glide库报错Error:Failed to resolve:com.android.support:26.0.2的解决
- Android多线程下载示例详解
- 详解Android Gradle插件3.0挖坑日记
- Android开发之拼音转换工具类PinyinUtils示例
- Android多线程断点续传下载示例详解
- Android设备与外接U盘实现数据读取操作的示例