springboot/tomcat使用filter实现防御xss攻击和sql注入
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了springboot/tomcat使用filter实现防御xss攻击和sql注入,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3959字,纯文字阅读大概需要6分钟。
内容图文
springboot/tomcat使用filter实现防御xss攻击、sql注入
作为一个有经验的Java web开发人员,相信大家都知道拦截器intercept和过滤器filter,他两基本可以实现的功能都差不多,下面简单说一下其区别:
1.filter是servlet的内容,对servlet的扩展都是基于filter完成
2.intercept是spring mvc框架的内容,只能在spring mvc项目中使用
3.spring mvc实现了servlet规范,因此如果说servlet是内核,那sping mvc就是外壳,所有前端请求一定先执行intercept拦截器链,在执行filter过滤器链
两个注解
@WebFilter(filterName = "securityFilter", urlPatterns = "/*")
@Component
@Component是spring的注解,springboot会扫描此类并添加到sevlet的FilterChain中
@WebFilter主要是提供的容器扫描加载,如tomcat容器,将filter打包放在lib目录下即可,省去web.xml中配置filter和filter-mapping,如下
<filter> <filter-name>ruphyFilter</filter-name> <filter-class> me.muphy.tomcat.filter.RequestFilter </filter-class> </filter> <filter-mapping> <filter-name>ruphyFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
xss或sql注入防御,就是对前端的不信任,需要对前端的输入做安全校验、过滤和替换
下面我实现了一个很简单但功能强大的安全filter,共参考,代码如下:
package me.muphy.filter; import org.springframework.stereotype.Component; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.*; import java.io.IOException; import java.util.*; @WebFilter(filterName = "securityFilter", urlPatterns = "/*") @Component public class SecurityFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { if (servletRequest instanceof HttpServletRequest) { HttpServletRequest request = (HttpServletRequest) servletRequest; filterChain.doFilter(new SecurityHttpServletRequestWrapper(request), servletResponse); } else { filterChain.doFilter(servletRequest, servletResponse); } } @Override public void destroy() { } /** * 此六行正则表达式 史上最强防御xss攻击、sql注入等,却较少影响用户使用特殊字符和关键字 */ public class SecurityHttpServletRequestWrapper extends HttpServletRequestWrapper { private Map<String, String> regRep = new HashMap<>(); public SecurityHttpServletRequestWrapper(HttpServletRequest request) { super(request); regRep.put("'([^']+)'", "‘$1’"); regRep.put("`([^`]+)`", "~$1~"); regRep.put("'(.*--+)", "‘$1"); regRep.put("\\\"([^\\\"]+)\\\"", "“$1”"); regRep.put("\\(([^\\)]+)\\)", "($1)"); regRep.put("<([^>]+)>", "<$1>"); } private String replace(String val) { if (val != null) { for (String key : regRep.keySet()) { val = val.replaceAll(key, regRep.get(key)); } } return val; } @Override public String getHeader(String name) { return replace(super.getHeader(name)); } @Override public Cookie[] getCookies() { Cookie[] cookies = super.getCookies(); if (cookies != null) { for (int i = 0; i < cookies.length; i++) { cookies[i].setValue(replace(cookies[i].getValue())); } } return cookies; } @Override public String getQueryString() { return replace(super.getQueryString()); } @Override public String getParameter(String name) { return replace(super.getParameter(name)); } @Override public String[] getParameterValues(String name) { String[] values = super.getParameterValues(name); if (values != null) { for (int i = 0; i < values.length; i++) { values[i] = replace(values[i]); } } return values; } @Override public Map<String, String[]> getParameterMap() { Map<String, String[]> parameterMap = super.getParameterMap(); if (parameterMap != null) { for (String key : parameterMap.keySet()) { String[] values = parameterMap.get(key); if (values != null) { for (int i = 0; i < values.length; i++) { values[i] = replace(values[i]); } } } } return parameterMap; } } }
<filter> ????????<filter-name>ruphyFilter</filter-name> ????????<filter-class> ??????????me.muphy.tomcat.filter.RequestFilter ????????</filter-class> ????</filter> ????<filter-mapping> ????????<filter-name>ruphyFilter</filter-name> ????????<url-pattern>/*</url-pattern> ????</filter-mapping>
内容总结
以上是互联网集市为您收集整理的springboot/tomcat使用filter实现防御xss攻击和sql注入全部内容,希望文章能够帮你解决springboot/tomcat使用filter实现防御xss攻击和sql注入所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。