java过滤器过滤xss_web项目脚本过滤--XSS过滤器

XSS脚本过滤

脚本攻击经常是项目测试人员或者“不法分子”闲着没事干,想办法让你的程序不正常,最近项目中刚好用到所以就贴出来做个笔记。

1.思路

我们可以通过servlet规范中的过滤器,对每一次请求进行过滤 --> 将请求参数获取到对脚本数据进行转义处理后再进行持久化操作,比如< script > < /script>中的''号。

2.配置过滤器

在项目中web.xml中添加:

XSSEscape

com.hp.up.front.xss.XSSFilter

XSSEscape

/*

REQUEST

其中com.hp.up.front.xss.XSSFilter就是过滤器路径

3.编写过滤器

自然是实现javax.servlet.Filter 重写doFilter了:

import java.io.IOException;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServletRequest;

public class XSSFilter implements Filter {

@Override

public v

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Java过滤器处理XSS攻击的示例代码: ```java import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper;import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.*; public class XssFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { MyHttpServletRequestWrapper requestWrapper = new MyHttpServletRequestWrapper((HttpServletRequest) servletRequest); HttpServletResponse response = (HttpServletResponse) servletResponse; filterChain.doFilter(requestWrapper, response); } @Override public void destroy() { } private class MyHttpServletRequestWrapper extends HttpServletRequestWrapper { public MyHttpServletRequestWrapper(HttpServletRequest request) { super(request); } @Override public String getParameter(String name) { String value = super.getParameter(name); if (value != null) { value = cleanXSS(value); } return value; } @Override public String[] getParameterValues(String name) { String[] values = super.getParameterValues(name); if (values != null) { for (int i = 0; i < values.length; i++) { values[i] = cleanXSS(values[i]); } } return values; } @Override public Enumeration<String> getParameterNames() { List<String> names = Collections.list(super.getParameterNames()); return Collections.enumeration(names); } @Override public Map<String, String[]> getParameterMap() { Map<String, String[]> paramMap = super.getParameterMap(); Map<String, String[]> newParamMap = new HashMap<>(); for (String key : paramMap.keySet()) { String[] values = paramMap.get(key); for (int i = 0; i < values.length; i++) { values[i] = cleanXSS(values[i]); } newParamMap.put(key, values); } return newParamMap; } private String cleanXSS(String value) { value = value.replaceAll("<", "<").replaceAll(">", ">"); value = value.replaceAll("\\(", "(").replaceAll("\\)", ")"); value = value.replaceAll("'", "'"); value = value.replaceAll("eval\\((.*)\\)", ""); value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\""); value = value.replaceAll("script", ""); return value; } } } ``` 该过滤器通过继承HttpServletRequestWrapper类,重写其的getParameter()、getParameterValues()、getParameterNames()和getParameterMap()方法,对请求参数进行过滤,防止XSS攻击。其,cleanXSS()方法用于过滤请求参数的特殊字符和脚本代码

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值