Sql Server存储过程防注入攻击

44 篇文章 1 订阅
2 篇文章 0 订阅
所谓Sql注入,就是利用动态构建Sql语句的操作,在输入参中增加额外sql信息从而在执行该操作时顺带进行


额外的地数据库操作的攻击方式。


使用存储过程可以很大程度上避免Sql注入攻击,但是并不能避免Sql注入功能。只要存在Sql语句动态生成,


而传入参包括字符串,就可以产生Sql注入。


目前在存储过程中需要进行Sql语句动态生成的基本是因为条件语句的动态形成,比如组合查询,条件更新,


条件删除。因为这类语句如果进行完全罗列将会是xx性的工作量。


目前比较完整的防御措施如下:
1.对于存在动态生成语句的存储过程的调用,对于传入字符串参数进行特殊字符替换:%='",:

2.使用sp_executesql格式化语句执行来执行动态语句


例子:

根据角色ID或者角色名进行组合条件查询一个角色信息。

存储过程如下:

Alter PROCEDURE [dbo].[SP_TestSqlInject]

(

@iCharId bigint,

@strName nvarchar(32)

)

AS

BEGIN

SET NOCOUNT ON;

declare @sqlStr nvarchar(2048);

declare @paramDefine nvarchar(2048);

set @sqlStr = 'select * from TableChar where ';

if @iCharId != 0

set @sqlStr = @sqlStr + 'iCharId = @pICharId and ';

if @strName != NULL

set @sqlStr = @sqlStr + 'strName = @pStrName and '

set @sqlStr = @sqlStr + ' 1 = 1'


set @paramDefine = '@pICharId bigint, @pStrName nvarchar(32)';

exec sp_executesql @sqlStr, @paramDefine, @iCharId, @strName;

End

go

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值