1. SQL盲注、SQL注入

  风险:可能会查看、修改或删除数据库条目和表。

  原因:未对用户输入正确执行危险字符清理。

  固定值:查看危险字符注入的可能解决方案。

2. pom.xml添加依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-configuration-processor</artifactId>
  4. <optional>true</optional>
  5. </dependency>

3. 添加SQL注入包装类

  1. import java.util.regex.Matcher;
  2. import java.util.regex.Pattern;
  3. import javax.servlet.http.HttpServletRequest;
  4. import javax.servlet.http.HttpServletRequestWrapper;
  5. import lombok.extern.slf4j.Slf4j;
  6. /**
  7. * SQL注入包装类
  8. *
  9. * @author CL
  10. *
  11. */
  12. @Slf4j
  13. public class SqlInjectHttpServletRequestWrapper extends HttpServletRequestWrapper {
  14. /**
  15. * 构造请求对象
  16. *
  17. * @param request
  18. */
  19. public SqlInjectHttpServletRequestWrapper(HttpServletRequest request) {
  20. super(request);
  21. }
  22. /**
  23. * 获取头部参数
  24. *
  25. * @param v 参数值
  26. */
  27. @Override
  28. public String getHeader(String v) {
  29. String header = super.getHeader(v);
  30. if (header == null || "".equals(header)) {
  31. return header;
  32. }
  33. return sqlFilter(header);
  34. }
  35. /**
  36. * 获取参数
  37. *
  38. * @param v 参数值
  39. */
  40. @Override
  41. public String getParameter(String v) {
  42. String param = super.getParameter(v);
  43. if (param == null || "".equals(param)) {
  44. return param;
  45. }
  46. return sqlFilter(param);
  47. }
  48. /**
  49. * 获取参数值
  50. *
  51. * @param v 参数值
  52. */
  53. @Override
  54. public String[] getParameterValues(String v) {
  55. String[] values = super.getParameterValues(v);
  56. if (values == null) {
  57. return values;
  58. }
  59. // 富文本内容不过滤
  60. if ("remarks".equals(v)) {
  61. return values;
  62. }
  63. int length = values.length;
  64. String[] resultValues = new String[length];
  65. for (int i = 0; i < length; i++) {
  66. // 过滤特殊字符
  67. resultValues[i] = sqlFilter(values[i]);
  68. if (!(resultValues[i]).equals(values[i])) {
  69. log.debug("SQL注入过滤器 => 过滤前:{} => 过滤后:{}", values[i], resultValues[i]);
  70. }
  71. }
  72. return resultValues;
  73. }
  74. /**
  75. * 预编译SQL过滤正则表达式
  76. */
  77. private Pattern sqlPattern = Pattern.compile(
  78. "(?:')|(?:--)|(/\\*(?:.|[\\n\\r])*?\\*/)|(\\b(select|update|and|or|delete|insert|trancate|char|into|substr|ascii|declare|exec|count|master|into|drop|execute)\\b)",
  79. Pattern.CASE_INSENSITIVE);
  80. /**
  81. * SQL过滤
  82. *
  83. * @param v 参数值
  84. * @return
  85. */
  86. private String sqlFilter(String v) {
  87. if (v != null) {
  88. String resultVal = v;
  89. Matcher matcher = sqlPattern.matcher(resultVal);
  90. if (matcher.find()) {
  91. resultVal = matcher.replaceAll("");
  92. }
  93. if (!resultVal.equals(v)) {
  94. return "";
  95. }
  96. return resultVal;
  97. }
  98. return null;
  99. }
  100. }

4. 配置文件添加配置

  1. # 信息安全
  2. security:
  3. sql:
  4. enable: true
  5. excludes:
  6. - /images/*
  7. - /jquery/*
  8. - /layui/*

5. 添加SQL注入过滤器

  1. import java.io.IOException;
  2. import java.util.List;
  3. import java.util.regex.Matcher;
  4. import java.util.regex.Pattern;
  5. import javax.servlet.Filter;
  6. import javax.servlet.FilterChain;
  7. import javax.servlet.FilterConfig;
  8. import javax.servlet.ServletException;
  9. import javax.servlet.ServletRequest;
  10. import javax.servlet.ServletResponse;
  11. import javax.servlet.annotation.WebFilter;
  12. import javax.servlet.http.HttpServletRequest;
  13. import org.springframework.boot.context.properties.ConfigurationProperties;
  14. import org.springframework.stereotype.Component;
  15. /**
  16. * SQL注入过滤器
  17. *
  18. * @author CL
  19. *
  20. */
  21. @Component
  22. @ConfigurationProperties(prefix = "security.sql")
  23. @WebFilter(filterName = "SqlInjectFilter", urlPatterns = "/*")
  24. public class SqlInjectFilter implements Filter {
  25. /**
  26. * 过滤器配置对象
  27. */
  28. FilterConfig filterConfig = null;
  29. /**
  30. * 是否启用
  31. */
  32. private boolean enable;
  33. public void setEnable(boolean enable) {
  34. this.enable = enable;
  35. }
  36. /**
  37. * 忽略的URL
  38. */
  39. private List<String> excludes;
  40. public void setExcludes(List<String> excludes) {
  41. this.excludes = excludes;
  42. }
  43. /**
  44. * 初始化
  45. */
  46. @Override
  47. public void init(FilterConfig filterConfig) throws ServletException {
  48. this.filterConfig = filterConfig;
  49. }
  50. /**
  51. * 拦截
  52. */
  53. @Override
  54. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
  55. throws IOException, ServletException {
  56. HttpServletRequest request = (HttpServletRequest) servletRequest;
  57. // 不启用或者已忽略的URL不拦截
  58. if (!enable || isExcludeUrl(request.getServletPath())) {
  59. filterChain.doFilter(servletRequest, servletResponse);
  60. return;
  61. }
  62. SqlInjectHttpServletRequestWrapper sqlInjectHttpServletRequestWrapper = new SqlInjectHttpServletRequestWrapper(
  63. request);
  64. filterChain.doFilter(sqlInjectHttpServletRequestWrapper, servletResponse);
  65. }
  66. /**
  67. * 销毁
  68. */
  69. @Override
  70. public void destroy() {
  71. this.filterConfig = null;
  72. }
  73. /**
  74. * 判断是否为忽略的URL
  75. *
  76. * @param urlPath URL路径
  77. * @return true-忽略,false-过滤
  78. */
  79. private boolean isExcludeUrl(String url) {
  80. if (excludes == null || excludes.isEmpty()) {
  81. return false;
  82. }
  83. return excludes.stream().map(pattern -> Pattern.compile("^" + pattern)).map(p -> p.matcher(url))
  84. .anyMatch(Matcher::find);
  85. }
  86. }

SQL盲注、SQL注入 - SpringBoot配置SQL注入过滤器的更多相关文章

  1. 小白日记42:kali渗透测试之Web渗透-SQL盲注

    SQL盲注 [SQL注入介绍] SQL盲注:不显示数据库内建的报错信息[内建的报错信息帮助开发人员发现和修复问题],但由于报错信息中提供了关于系统的大量有用信息.当程序员隐藏了数据库内建报错信息,替换 ...

  2. WEB安全实战(一)SQL盲注

    前言 好长时间没有写过东西了,不是不想写,仅仅只是是一直静不下心来写点东西.当然,拖了这么长的时间,也总该写点什么的.近期刚刚上手安全方面的东西,作为一个菜鸟,也本着学习的目的,就谈谈近期接触到的安全 ...

  3. Kali学习笔记43:SQL盲注

    前面的文章都是基于目标会返回错误信息的情况进行判断是否存在SQL注入 我们可以轻易根据数据库报错信息来猜测SQL语句和注入方式 如果程序员做得比较好,不显示错误信息,这种情况下得SQL注入称为SQL盲 ...

  4. WEB安全番外第四篇--关于SQL盲注

    一.SQL盲注: 看不到回显的,无法从返回直接读取到数据库内容的对数据的猜解,属于盲注. 二.第一种--基于布尔类型的盲注: 这种很简单,最典型的例子,就是挖SQL注入的时候常用的: ''' http ...

  5. SQL盲注

    一.首先输入1和-1 查看输入正确和不正确两种情况 二.三种注入POC LOW等级 ... where user_id =$id 输入      真  and  假 = 假 (1)...where u ...

  6. SQL盲注攻击的简单介绍

    1 简介     1.1 普通SQL注入技术概述     目前没有对SQL注入技术的标准定义,微软中国技术中心从2个方面进行了描述[1]:     (1) 脚本注入式的攻击     (2) 恶意用户输 ...

  7. Web系统常见安全漏洞及解决方案-SQL盲注

    关于web安全测试,目前主要有以下几种攻击方法: 1.XSS 2.SQL注入 3.跨目录访问 4.缓冲区溢出 5.cookies修改 6.Htth方法篡改(包括隐藏字段修改和参数修改) 7.CSRF ...

  8. SQL盲注工具BBQSQL

    SQL盲注工具BBQSQL   SQL注入是将SQL命令插入到表单.域名或者页面请求的内容中.在进行注入的时候,渗透测试人员可以根据网站反馈的信息,判断注入操作的结果,以决定后续操作.如果网站不反馈具 ...

  9. 第九届极客大挑战——Geek Chatroom(sql盲注)

    首先观察这个web应用的功能,可以任意留言,也可以搜索留言,当然我还用cansina扫描过网站,查看过源码,抓包查看过header等.没发现其他提示的情况下断定这就是个sql注入,可能存在的注入点呢, ...

随机推荐

  1. apiAutoTest-更新2020/11/23

    原始版本 简书:https://www.jianshu.com/p/6bfaca87a93b 博客园:https://www.cnblogs.com/zy7y/p/13426816.html test ...

  2. 解析MindMapper选项中的鱼骨选项

    MindMapper思维导图可以画鱼骨图,而且完成的相当漂亮,我们可以在选项设置中定义鱼骨图图的默认样式.下面本文就分析了MindMapper选项中可以更改哪些鱼骨图设置. 我们首先打开MindMap ...

  3. 关于GoldWave为Vegas制作音频交叉淡化特效的教程分享

    在Vegas里对音频交叉淡化的处理,是通过将两段音频交叠.调整交叠部分的音量.选取交叉淡化类型这三步来实现的,许多步骤是在音频轨道拖动音量线来实现的,操作上不够灵敏精细.其实,单就音频的交叉淡化处理, ...

  4. 视频剪辑软件Camtasia的快捷键大全

    今天来给大家介绍一下Camtasia快捷键的相关内容,Camtasia也是一个十分好用的电脑屏幕录制与视频剪辑制作软件了,可能有些朋友用过,毕竟它在视频录制与制作上确实比较好用. 首先在菜单栏中点击& ...

  5. SFTP 服务器cd() 方法和 ls() 方法说明

    方法说明: cd():这个方法用于进入某个目录下. 默认情况,当连接SFTP服务器成功后直接进入用户目录,比如我连接自己本机SFTP服务器后进入/Users/mac目录.cd() 方法进入每一个目录都 ...

  6. 【P4211 LNOI2014】LCA——树链剖分 +询问离线

    (7.16晚)更完先在B站颓一会儿-- --------------------------------------------------------------- (以下为luogu题面) 题目描 ...

  7. C++之父接受采访:对 C++ 成功的关键和发展历程进行了回顾

    C++ 的起源可以追溯到 40 年前,但它仍然是当今使用最广泛的编程语言之一. 到 2020 年 9 月为止,C++ 是仅次于 C 语言.Java 和 Python,位于全球第四的编程语言.根据最新的 ...

  8. http 文件上传

    参考https://www.cnblogs.com/yuwei0911/p/8601542.html

  9. schema设计陷阱

    1.太多的列: mysql的存储引擎api工作时需要在服务器层和存储引擎层之间通过行缓冲格式拷贝数据,然后在服务器层将缓冲内容解码成各个列.从行缓冲中将编码过的列转换成行数据结构的操作代价是非常高的. ...

  10. 【鸿蒙开发板试用报告】用OLED板实现FlappyBird小游戏(中)

    小伙伴们久等了,在上一篇<[开发板试用报告]用OLED板实现FlappyBird小游戏(上)>中,我们本着拿来主义的原则,成功的让小鸟在OLED屏幕上自由飞翔起来,下面我们将加入按钮交互功 ...