當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
SpringBoot项目防止Sql注入
生活随笔
收集整理的這篇文章主要介紹了
SpringBoot项目防止Sql注入
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
由于我們的項目遭受了一次sql注入攻擊,被批評的頭破血流,馬不停蹄安排起來。
首先,了解一下@WebFilter注解
@WebFilter 用于將一個類聲明為過濾器,被@WebFilter注解的類,會在容器啟動時被加載,并進行屬性配置。具體的參數就不詳細放出來了。initParams是該過濾器的初始化參數。
@Slf4j @Component @WebFilter(urlPatterns = "/*", filterName = "SQLInjection", initParams = { @WebInitParam(name = "regex", value = "(?:')|(?:--)|(/\\*(?:.|[\\n\\r])*?\\*/)|" +"(\\b(and|exec|execute|insert|select|delete|update|count|drop|%|chr|mid|master|truncate|char|declare|sitename|net user|xp_cmdshell|or|like'|and|exec|execute|insert|create|drop|table|from|grant|use|group_concat|column_name|information_schema.columns|table_schema|union|where|select|delete|update|order|by|count|chr|mid|master|truncate|char|declare|or|--|like)\\b)") }) public class SqlInjectFilter implements Filter {private String regx;@Overridepublic void init(FilterConfig filterConfig) throws ServletException {this.regx = filterConfig.getInitParameter("regex");}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest req = (HttpServletRequest) servletRequest;Map parametersMap = servletRequest.getParameterMap();Iterator it = parametersMap.entrySet().iterator();while (it.hasNext()) {Map.Entry entry = (Map.Entry) it.next();String[] value = (String[]) entry.getValue();for (int i = 0; i < value.length; i++) {if(null != value[i] && this.regx != null){Pattern p = Pattern.compile(this.regx); Matcher m = p.matcher(value[i]);if (m.find()) {log.error("您輸入的參數有非法字符,請輸入正確的參數!");servletRequest.setAttribute("err", "您輸入的參數有非法字符,請輸入正確的參數!");servletRequest.setAttribute("pageUrl",req.getRequestURI());servletRequest.getRequestDispatcher( "/error").forward(servletRequest, servletResponse);return;}}}}filterChain.doFilter(servletRequest, servletResponse);}@Overridepublic void destroy() {} }順便提一下Pattern
Pattern p = Pattern.compile(regex);? //編譯正則表達式,并創建Pattern類。
Matcher m = p.matcher(s);? // 通過模式對象得到匹配器對象
boolean b= m.find(); // 通過對象的find方法就是查找有沒有滿足條件的子串
這里可以去看一下這篇文章,寫的挺詳細的。Java Pattern和Matcher字符匹配詳解_知行流浪-CSDN博客_java pattern和matcher
最后,不能忘了啟動類的注解!!!
@ServletComponentScan("xxx.xxx.xxx.filter")
在SpringBootApplication上使用@ServletComponentScan注解后,Filter、Listener可以直接通過@WebFilter、@WebListener注解自動注冊。
告辭!?
總結
以上是生活随笔為你收集整理的SpringBoot项目防止Sql注入的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三大主流框架
- 下一篇: 使用JMeter创建数据库(Mysql)