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

如何用Python正则检测分号、注释字符以防范SQL注入?

正则检测SQL注入特征的实现与拓展

一、编写检测目标符号的正则表达式

要匹配输入字符串任意位置的;、/*或*/,可以使用以下正则:

[;]|/\*|\*/
  • [;]:匹配单独的分号(方括号包裹是习惯写法,也可直接写;)
  • /\*:匹配注释起始符/*,*在正则中是特殊字符,需用\转义
  • \*/:匹配注释结束符*/,同样需要转义*

二、整合后的检测代码

将新的正则规则加入原有列表,优化遍历逻辑后的代码如下:

import re

# 包含原有SQL关键字检测与新增符号检测的规则列表
regex_terms = [
    r'(D|d)(R|r)(O|o)(P|p).*(T|t)(A|a)(B|b)(L|l)(E|e)',
    r'(I|i)(N|n)(S|s)(E|e)(R|r)(T|t).*(I|i)(N|n)(T|t)(O|o)',
    r'[;]|/\*|\*/'
]

user_input = {
    "first name": "Bob",
    "last name": "DROP TABLE",
    "email": "; malicious statement here",
    "example key": "/* */",
    "other example": "*/"
}

# 遍历所有输入键值对进行检测
for input_key, input_value in user_input.items():
    for pattern in regex_terms:
        if re.search(pattern, input_value):
            print(f"检测到恶意输入: [{input_key}] -> {input_value}")
            break  # 找到匹配项后终止当前正则检测,避免重复输出

运行这段代码会输出所有包含目标特征的输入:

检测到恶意输入: [last name] -> DROP TABLE
检测到恶意输入: [email] -> ; malicious statement here
检测到恶意输入: [example key] -> /* */
检测到恶意输入: [other example] -> */

三、其他常见SQL注入类型

除了你关注的注释符、分号堆叠注入,还有这些典型的SQL注入场景需要了解:

  • 基于错误的注入:构造特殊SQL语句触发数据库报错,从报错信息中提取数据库结构、数据等敏感内容
  • 联合查询注入:利用UNION SELECT语句拼接合法查询与恶意查询,将非法查询结果混入正常返回内容
  • 盲注:
    • 布尔盲注:通过判断SQL语句执行后的布尔结果(如AND 1=1返回正常,AND 1=2返回异常)来逐字符猜解数据
    • 时间盲注:通过插入SLEEP()等延迟函数,根据响应时间判断语句是否执行成功,从而猜解信息
  • 绕过过滤的注入:攻击者通过大小写混淆(如DrOp TaBlE)、多注释嵌套(如/*a*/DROP/*b*/TABLE)、字符编码(URL编码、Unicode编码)等方式绕过简单的正则过滤
  • 存储过程注入:利用数据库内置存储过程(如MySQL的LOAD_FILE()、SQL Server的xp_cmdshell)执行恶意操作,甚至获取服务器权限

重要提醒:正则过滤只能作为辅助手段,生产环境必须使用参数化查询(如Python中sqlite3的?占位符、psycopg2的%s占位符),从根源上避免SQL注入风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 03:50:24