首先说一下什么是XSS攻击
XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,
故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞,它允许恶意web
用户将代码植入到提供给其它用户使用的页面中。
白话解释
说白了xss攻击就是jq或html代码攻击,用户提交的数据是jq或html代码,
前台拿到数据库中查出的jq或html代码,浏览器会直接解析执行
实现思路
重写()方法,在controller获取参数之前进行jq代码转换,也就是将
<Script>所有标签代码进行替换,在这里要注意,HttpServletRequest是个接口,
它的实现类是HttpServletRequestWrapper,所以只需要继承HttpServletRequestWrapper,
重写方法,在通过过滤器将原本的HttpServeltRequest替换为自定义的HttpServeltRequest
代码
1.自定义类继承HttpServletRequestWrapper重写getParamter
package ;
import ;
import ;
import ;
import ;
/**
* ClassName XssHttpServletRequestWrapper
* Package
* Description
*
* @author cyf
* @date 2019/4/22 9:24
*/
public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {
/**
* Constructs a request object wrapping the given request.
*
* @param request The request to wrap
* @throws IllegalArgumentException if the request is null
*/
public XssHttpServletRequestWrapper(HttpServletRequest request) {
super(request);
}
@Override
public String getParameter(String name) {
String parameter = (name);
if((parameter)){
//这里使用的阿帕奇的common-lang3中的转义html方法,也可以自己实现,
String escapeParameter = (parameter);
(escapeParameter);
return escapeParameter;
}
return null;
}
}
2.自定义过滤器,使用自定义的HttpServletRequest
package ;
import ;
import ;
import .*;
import ;
import ;
import ;
/**
* ClassName XssFilter
* Package
* Description
*
* @author cyf
* @date 2019/4/22 9:23
*/
@Component
@WebFilter(urlPatterns = {"/*"},filterName = "xssFilter")
public class XssFilter implements Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
XssHttpServletRequestWrapper req=new XssHttpServletRequestWrapper((HttpServletRequest)request);
(req,response);
}
@Override
public void destroy() {
}
}
总结
实现方式特别简单,主要是思路,如果对你有所帮助,帮忙点个赞吧 ?
个人博客:云随笔
可以关注下博主的公众号,实时推送解决方案!