利用过滤器防止XSS攻击
为什么80%的码农都做不了架构师?>>>
一、首先科普点知识
(一)什么是XSS?
xss又叫CSS(Cross-SiteScripting),跨站脚本攻击。恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。主要指的自己构造XSS跨站漏洞网页或者寻找非目标机以外的有跨站漏洞的网页。
(二)Java中拦截器与过滤器的差异:
1、拦截器是基于java反射机制的,而过滤器是基于函数回调的。
2、过滤器依赖于servlet容器,而拦截器不依赖于servlet容器。
3、拦截器只对action起作用,而过滤器几乎可以对所有请求起作用。
4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能。
5、在action的生命周期里,拦截器可以多起调用,而过滤器只能在容器初始化时调用一次。
二、写过滤器实现过滤
(一)首先自己写一个过滤器
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;public class XSSFilter implements Filter { @Override public void destroy() { // TODO Auto-generated method stub } @Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { // TODO Auto-generated method stub arg2.doFilter(new XSSRequestWrapper((HttpServletRequest) arg0), arg1); } @Override public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } }
(二)然后写一个自己用来实现业务的HttpServletRequestWrapper
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.util.regex.Pattern;public class XSSRequestWrapper extends HttpServletRequestWrapper {public XSSRequestWrapper(HttpServletRequest request) {super(request);}@Overridepublic String[] getParameterValues(String parameter) {String[] values = super.getParameterValues(parameter);if (values == null) {return null;}int count = values.length;String[] encodedValues = new String[count];for (int i = 0; i < count; i++) {encodedValues[i] = stripXSS(values[i]);}return encodedValues;}@Overridepublic String getParameter(String parameter) {String value = super.getParameter(parameter);return stripXSS(value);}@Overridepublic String getHeader(String name) {String value = super.getHeader(name);//return stripXSS(value);return value;}public String getQueryString() {String value = super.getQueryString();if (value != null) {value = stripXSS(value);}return value;}private String stripXSS(String value) {if (value != null) {// Avoid anything between script tagsPattern scriptPattern = Pattern.compile("<script>(.*?)</script>", Pattern.CASE_INSENSITIVE);value = scriptPattern.matcher(value).replaceAll("");// Avoid anything in a// expressionscriptPattern = Pattern.compile("src[\r\n]*=[\r\n]*\\\'(.*?)\\\'",Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);value = scriptPattern.matcher(value).replaceAll("");scriptPattern = Pattern.compile("src[\r\n]*=[\r\n]*\\\"(.*?)\\\"",Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);value = scriptPattern.matcher(value).replaceAll("");// Remove any lonesome </script> tagscriptPattern = Pattern.compile("</script>", Pattern.CASE_INSENSITIVE);value = scriptPattern.matcher(value).replaceAll("");// Remove any lonesome <script ...> tagscriptPattern = Pattern.compile("<script(.*?)>",Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);value = scriptPattern.matcher(value).replaceAll("");// Avoid eval(...) expressionsscriptPattern = Pattern.compile("eval\\((.*?)\\)",Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);value = scriptPattern.matcher(value).replaceAll("");// Avoid expression(...) expressionsscriptPattern = Pattern.compile("expression\\((.*?)\\)",Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);value = scriptPattern.matcher(value).replaceAll("");// Avoid javascript:... expressionsscriptPattern = Pattern.compile("javascript:", Pattern.CASE_INSENSITIVE);value = scriptPattern.matcher(value).replaceAll("");// Avoid vbscript:... expressionsscriptPattern = Pattern.compile("vbscript:", Pattern.CASE_INSENSITIVE);value = scriptPattern.matcher(value).replaceAll("");// Avoid onload= expressionsscriptPattern = Pattern.compile("onload(.*?)=",Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);value = scriptPattern.matcher(value).replaceAll("");/*过滤html标签*/Pattern p_html = Pattern.compile("<[^>]+>", Pattern.CASE_INSENSITIVE);value = p_html.matcher(value).replaceAll("");Pattern p_html1 = Pattern.compile("<[^>]+", Pattern.CASE_INSENSITIVE);value = p_html1.matcher(value).replaceAll("");}return value;}
}
(三)最后在web.xml中进行配置
<filter><filter-name>XSSFilter</filter-name><filter-class></filter-class></filter><filter-mapping><filter-name>XSSFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
完事!
转载于:https://my.oschina.net/ayo123/blog/1540630
利用过滤器防止XSS攻击相关推荐
- 如何绕过大写过滤器实现XSS攻击
虽然我们不是在安全公司工作,但喜欢参加Hackerone上的漏洞悬赏项目,喜欢寻找漏洞. 而最近发现的漏洞让我感觉javascript代码中的注入漏洞的确会让人防不胜防. 我们在目标网站上找到了一个和 ...
- php httponly_xss防御之php利用httponly防xss攻击
xss的概念就不用多说了,它的危害是极大的,这就意味着一旦你的网站出现xss漏洞,就可以执行任意的js代码,最可怕的是攻击者利用js获取cookie或者session劫持,如果这里面包含了大量敏感信息 ...
- XSS攻击及解决方案
什么是XSS攻击? XSS攻击使用Javascript脚本注入进行攻击 XSS攻击常出现在提交表单中,如博客的评论区等,用户可以通过提交评论:,那么只要访问该页面的用户都会弹窗,当然,这可能是为了娱乐 ...
- Java添加过滤器过滤xss入侵
Filter过滤器过滤XSS攻击 一.springmvc框架 1.添加自定义过滤器文件XssFilter.java和XssHttpServletRequestWrapper.java XssFilte ...
- Ruo-Yi 前后端分离防止XSS攻击和自定义可以重复读取InputStream流
Ruo-Yi 前后端分离防止XSS攻击和自定义可以重复读取InputStream流 防止XSS攻击分析 1.什么是xss攻击 **XSS 即(Cross Site Scripting)中文名称为: ...
- 保姆级教学 XSS攻击的过滤器
对于XSS攻击,一种有效的防范措施是重写过滤器的方式来过滤一些有潜在风险的过滤器. 过滤策略:把特殊字符转为HTML实体编码, 这样存在数据库里较安全 返回给前端时会被js解析 ...
- 【网络安全】嘴对嘴教你利用XSS攻击,体验一次当黑客的感觉
一:什么是XSS攻击呢? 人们经常将跨站脚本攻击(Cross Site Scripting)缩写为CSS,但这会与层叠样式表(Cascading Style Sheets,CSS)的缩写混淆.因此,有 ...
- xss过滤器无法处理ajax请求_thunkPHP 预防XSS攻击
比如在有人恶意在你的输入框中或文本域中输入<script>标签,如果不做处理的话,输入框中的<script>会保存到我们数据库中,等到将这个数据拿出来展示的时候,就等于将这个内 ...
- 解决SQL注入与XSS攻击
最近接手之前同事的几个项目,公司利用扫描工具进行全项目扫描,发现了部分项目代码存在安全漏洞,所以需要进行项目代码修复以避免有人恶意攻击.这个任务自然而然的就落到我手上.在这里记录一下操作的过程. 扫描 ...
- xss攻击-跨站脚本漏洞修复 Springboot项目
跨站脚本漏洞 XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序.这些恶意网页程序通常是JavaScript,但实际上也可 ...
最新文章
- C#语言与面向对象技术(6)
- ARTS打卡计划第三周-Tips
- 评论设置----第二章:创建和管理内容
- mysql开窗函数over_sql中的开窗函数over()
- struts2 redirect 获取参数null_社会化登录支持授权域以便于获取更大权限
- FLEX:target和currentTarget属性的区别
- 求最大公约数c语言代码_辗转相除求最大公约数原理
- JavaScript正则匹配
- 当你使用微信和QQ时,请不要忘记ICQ这个伟大的公司!
- google嗅探(简洁实用版)
- 2022最新第四方聚合支付系统源码+详细搭建教程
- 苹果手机连wifi跳不出来登录网页解决办法
- Angular学习笔记第三章——创建组件
- 密码学的基础:X.690和对应的BER CER DER编码
- 在window中nginx安装腾讯云ssl报错nginx: [emerg] cannot load certificate
- 北航 华科 计算机学院官网,北京航空航天大学和华中科技大学如何比较?
- 二级域名分发系统美化版网站源码 附搭建教程
- python解非线性规划问题_Python+Gurobi+Pulp解决线性规划问题
- ubuntu下的3D桌面.compiz
- photoshop中关于配置的15条技巧
热门文章
- 用DataFormatString格式化GridView 【转】
- 基于强化学习和析取图模型的统一调度框架
- (源码)智能优化算法—藤壶交配优化算法(Barnacles Mating Optimizer,BMO)
- 【Git/Github学习笔记】ubuntu系统下使用git命令与windows下的差别
- 智能优化算法:蜉蝣算法 - 附代码
- 从零基础入门Tensorflow2.0 ----九、44.3 keras模型转换成savedmodel
- 从零基础入门Tensorflow2.0 ----六、27 卷积神经网络(2)
- ENVI学习总结(十一)——NDVI的计算
- 开发利器--JSONVIEW插件 网页json数据直接转换
- 平衡二叉树---- AVL树