You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何开发SQL注入防护过滤器 实现恶意HTTP请求拦截阻断

SQL注入防护过滤器实现方案

SQL注入防护过滤器架构示意图
你要实现的HTTP请求拦截检测能力可以按照以下步骤落地:

1. 请求捕获层实现

根据你的业务技术栈选两种部署模式即可:

  • 反向代理模式:在业务服务前端部署独立的代理层,所有客户端请求先经过代理再转发到后端服务。你可以基于Nginx的ngx_http_lua_module扩展写Lua检测逻辑,也可以用Go/Java自研轻量反向代理服务,这种模式对后端业务无侵入,支持多语言业务栈统一接入。
  • 服务端内置过滤器模式:如果是单一技术栈的业务,直接用框架原生的拦截能力即可:
    • Java生态:实现Servlet Filter或者Spring MVC的HandlerInterceptor
    • Python生态:使用Django中间件、Flask请求装饰器
    • Node.js生态:实现Express/Koa的中间件
      无论用哪种模式,都需要完整解析HTTP请求的所有用户可控字段:URL查询参数、Form表单参数、JSON/XML请求体、Cookie、自定义请求头,避免遗漏攻击 payload 传入的位置。

2. SQL注入特征检测逻辑

检测逻辑可以从易到难逐步迭代:

  • 初级版本:用正则匹配常见注入特征,检测前先对参数做URL解码、Unicode解码、注释清除等归一化处理,避免绕过。常见匹配特征包括单引号/双引号闭合符、UNION、SELECT、OR 1=1、EXEC、xp_cmdshell等SQL关键字的大小写变形、注释插入变形。
    以下是Java版简单的过滤器示例:
    public class SqlInjectFilter implements Filter {
        // 配置注入特征正则,开启大小写不敏感匹配
        private static final Pattern INJECT_RULE = Pattern.compile("(.*')|(\\b(select|union|insert|delete|update|drop|exec|xp_cmdshell)\\b)", Pattern.CASE_INSENSITIVE);
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            HttpServletRequest req = (HttpServletRequest) request;
            // 遍历所有请求参数检测
            Enumeration<String> paramNames = req.getParameterNames();
            while (paramNames.hasMoreElements()) {
                String paramValue = req.getParameter(paramNames.nextElement());
                if (INJECT_RULE.matcher(paramValue).find()) {
                    // 检测到恶意特征直接返回403阻断
                    ((HttpServletResponse) response).sendError(HttpServletResponse.SC_FORBIDDEN, "Illegal Request");
                    return;
                }
            }
            chain.doFilter(request, response);
        }
    }
    
  • 优化版本:引入SQL语法解析能力,把参数值代入SQL语法树检测,如果参数可以构造出额外的SQL查询/操作逻辑,判定为恶意请求,这种方案的误报率远低于正则匹配。

3. 拦截与日志处理

检测到恶意请求后,直接终止请求转发,给客户端返回403状态码即可,同时建议记录攻击日志,包含请求IP、请求路径、命中的规则、请求参数、时间戳,方便后续的攻击溯源和规则优化。

注意事项

  • 该过滤器是防御SQL注入的补充手段,不能替代后端的预编译SQL、参数绑定等核心防御逻辑,避免规则被绕过导致防护失效
  • 规则需要定期更新,覆盖新出现的注入绕过手法
  • 正式上线前要做充分的业务测试,避免规则误杀正常业务请求,影响业务可用性

内容的提问来源于stack exchange,提问作者jithin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 08:09:03