Struts网站基于Filter的XSS漏洞修复
来源:互联网 发布:hadoop能用python吗 编辑:程序博客网 时间:2024/06/06 09:50
1,关于XSS漏洞的知识,网上有很多文档,例如点击打开链接
2,关于XSS漏洞修复的知识也有很多,本文对本人修复XSS做下记录
3,Spring 中 XSS漏洞修复的可以参考 点击打开链接
4,但是以上方法仅仅适用于Spring 的修复,Struct有自己的拦截包装机制,完整的 Struct 中 Xss 漏洞修复,可以参考 点击打开链接
5,但是以上对Struct中Xss漏洞修复的代码有点多,我们知道对于一个已经维护多年的web项目而言,修复一个问题最好用尽可能少的代码完成,于是本人结合以上两篇文章给出修复方案
6,利用javax.servlet.Filter 和 org.apache.struts2.dispatcher.StrutsRequestWrapper 实现最小代码量拦截Xss攻击
7,Filer代码如下
public class XSSFilter implements Filter { private static final Logger LOGGER = LoggerFactory.getLogger(XSSFilter.class); @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; String currentURI = httpRequest.getRequestURI(); String targetURI = currentURI.substring(currentURI.indexOf("/", 1)); LOGGER.info("targetURI:{}", targetURI); chain.doFilter(new XSSStrutsRequestWrapper((HttpServletRequest) request), response); } @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void destroy() { }}8,Wrapper代码如下
public class XSSStrutsRequestWrapper extends StrutsRequestWrapper { private static final Logger LOG = LoggerFactory.getLogger(XSSStrutsRequestWrapper.class);public XSSStrutsRequestWrapper(HttpServletRequest req) {super(req);}@Override public String getParameter(String name) { name = StringEscapeUtils.escapeHtml4(name); // 返回值之前 先进行过滤 return StringEscapeUtils.escapeHtml4(super.getParameter(name)); } @Override public String[] getParameterValues(String name) { name = StringEscapeUtils.escapeHtml4(name); // 返回值之前 先进行过滤 String[] values = super.getParameterValues(name); if(values != null){ for (int i = 0; i < values.length; i++) { values[i] = StringEscapeUtils.escapeHtml4(values[i]); } } return values; }@Overridepublic Enumeration<String> getParameterNames() {Enumeration<String> names = super.getParameterNames();while(names.hasMoreElements()){String name = names.nextElement();name = StringEscapeUtils.escapeHtml4(name);}return names;}@Override public Map getParameterMap() { LOG.info("getParameterMap"); Map paramMap = super.getParameterMap(); if (CollectionUtils.isEmpty(paramMap)) { return paramMap; } for (Object value : paramMap.values()) { String[] str = (String[])value; if (str != null) { for (int i = 0; i < str.length; i++) { str[i] = StringEscapeUtils.escapeHtml4(str[i]); } } } LOG.info("ParameterMap" + JSON.toJSONString(paramMap)); return paramMap; }}
9,web.xml中拦截器配置
<filter> <filter-name>strutsXSSFilter</filter-name> <filter-class>com.my.web.xss.XSSFilter</filter-class> </filter> <filter-mapping> <filter-name>strutsXSSFilter</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping>
10,以上对于filter的配置中要注意,url-pattern的匹配规则只有三种:
精确匹配:如:/mytest.action,只会匹配mytest.action这个url
路径匹配:如:/my/*,会匹配my为前缀的url
后缀匹配:如:*.action,会匹配.action为后缀url
11,以上仅对非multipart/form-data请求做拦截,涉及multipart/form-data的请求还需要在Filter中做请求校验,
然后再写一个org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper的类
阅读全文
0 0
- Struts网站基于Filter的XSS漏洞修复
- XSS漏洞修复
- xss漏洞修复
- java xss漏洞Filter
- asp 网站 XSS跨站脚本漏洞如何修复
- 使用拦截器Filter修补输入框的xss漏洞
- thinkphp 3.1模板中的xss漏洞修复
- XSS漏洞修复----过滤器(亲测可用)
- [PoC]某B2B网站的一个反射型XSS漏洞
- 基于网络爬虫的XSS漏洞检测技术
- 基于DOM的XSS注入漏洞简单解析
- 最新Struts漏洞修复方案
- struts s2-045漏洞修复
- XSS漏洞的分类
- XSS漏洞的分类
- 网站sql注入漏洞修复
- 为什么主流网站无法捕获 XSS 漏洞?
- 为什么主流网站无法捕获 XSS 漏洞?
- tensorflow版本更新
- 算法作业HW17:LeetCode101 Symmetric Tree
- 【PB】配置外源数据库(以SQL Server为例)
- 配置CORS解决跨域调用—反思思考问题的方式
- 谈谈对OS中的中间虚拟层的看法
- Struts网站基于Filter的XSS漏洞修复
- [leetcode]45. Jump Game II(Java)
- P1066 2^k进制数 NOIP 2006 提高组 第四题
- android桌面小部件appwidget使用ListView或者StackView如何刷新
- 响应式设计(responsive web design)的视图显示法
- TCP 握手与挥手
- color报错
- EJB学习笔记_10_依赖注入(beanname注入)
- BZOJ 1925: [Sdoi2010]地精部落 dp