Spring 防御CSRF、XSS和SQL注入攻击
发布日期:2022-01-11 03:10:01
浏览次数:5
分类:技术文章
本文共 2940 字,大约阅读时间需要 9 分钟。
对每个post请求的参数过滤一些关键字,替换成安全的,例如:< > ' " \ / # &方法是实现一个自定义的HttpServletRequestWrapper,然后在Filter里面调用它,替换掉getParameter函数即可。
首先添加一个XssHttpServletRequestWrapper:
package com.ibm.web.beans;import java.util.Enumeration;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletRequestWrapper;public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { public XssHttpServletRequestWrapper(HttpServletRequest servletRequest) { super(servletRequest); } public 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] = cleanXSS(values[i]); } return encodedValues; } public String getParameter(String parameter) { String value = super.getParameter(parameter); if (value == null) { return null; } return cleanXSS(value); } public String getHeader(String name) { String value = super.getHeader(name); if (value == null) return null; return cleanXSS(value); } private String cleanXSS(String value) { //这里特意 加多个空格.... 方便 csdn显示 ,如 < ==> & lt; value = value.replaceAll("<", "& lt;").replaceAll(">", "& gt;"); value = value.replaceAll("\\(", "& #40;").replaceAll("\\)", "& #41;"); value = value.replaceAll("'", "& #39;"); value = value.replaceAll("eval\\((.*)\\)", ""); value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\""); value = value.replaceAll("script", ""); return value; }}
然后添加一个过滤器XssFilter :
最后在web.xml里面配置一下,所有的请求的getParameter会被替换,如果参数里面 含有敏感词会被替换掉:
XssSqlFilter com.ibm.web.beans.XssFilter XssSqlFilter /* REQUEST
转载地址:https://yuki-ho.blog.csdn.net/article/details/53671686 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2024年04月01日 05时30分05秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Varnish purges 缓存清除
2021-06-30
Linux下redis安装部署
2021-06-30
水平切分与垂直切分
2021-06-30
MySQL引擎
2021-06-30
MySQL下的NoSQL解决方案HandlerSocket
2021-06-30
Apache服务器下使用 ab 命令进行压力测试
2021-06-30
查看Firefox中的缓存
2021-06-30
http header头设置反向代理不缓存
2021-06-30
配置MySQL主从复制
2021-06-30
CI框架如何删除地址栏的 index.php
2021-06-30
expires与etag控制页面缓存的优先级
2021-06-30
取消掉Transfer-Encoding:chunked
2021-06-30
HTTP协议中的Tranfer-Encoding:chunked编码解析
2021-06-30
JavaScript面向对象编程
2021-06-30
在Javascript中使用面向对象的编程
2021-06-30
由浅入深剖析.htaccess
2021-06-30
php函数serialize()与unserialize()
2021-06-30
PHP Webservice的发布与调用
2021-06-30
php反射类 ReflectionClass
2021-06-30
php扩展xdebug基本使用
2021-06-30