|M| 从零开始学习存储过程第十贴:写了存储过程,但CSDN朋友都说组SQL不能防止注入和' 那我这写的第一条存储过程要怎么改 谢谢 急
因为自己查询的时候拼写SQL语句的时候不能够防止用户输入 '出错的问题
(又不想去打如 '转成 ' ')
后来听说用SQL存储过程可以解决这个问题
然后学习了存储过程的写法,写了以下一条查询语句
CREATE Procedure COrder_Search(
@OrderID int,
@MemberID int,
@MyClass nvarchar(8),
@MyDayBegin datetime,
@MyDayEnd datetime,
@MyState int,
@MyPayID int,
@MyPostID int,
@MyName nvarchar(20)
)
AS
Declare @sql nvarchar(1000)
Declare @iWhere nvarchar(1000)
Set @sql= 'SELECT * FROM B2COrder '
Set @iWhere= ' Where 1=1 '
if @OrderID <> -1
Begin
Set @iWhere=@iWhere + 'And OrderID = ' + convert(nvarchar,@OrderID)
End
if @MemberID <> -1
Begin
Set @iWhere=@iWhere + 'And MemberID = ' + convert(nvarchar,@MemberID)
End
if @MyClass <> ' '
Begin
Set @iWhere=@iWhere + 'And MyClass = ' ' ' + @MyClass + ' ' ' '
End
if @MyDayBegin > '1900-01-01 '
Begin
Set @iWhere=@iWhere + ' And DateDiff(d,MyDay, ' ' ' + convert(nvarchar,@MyDayBegin ) + ' ' ') <= 0 '
End
if @MyDayEnd > '1900-01-01 '
Begin
Set @iWhere=@iWhere + ' And DateDiff(d,MyDay, ' ' ' + convert(nvarchar,@MyDayEnd )+ ' ' ') > =0 '
End
if @MyState <> -1
Begin
Set @iWhere=@iWhere + 'And MyState = ' + convert(nvarchar,@MyState )
End
if @MyPayID <> -1
Begin
Set @iWhere=@iWhere + 'And MyPayID = ' + convert(nvarchar,@MyPayID )
End
if @MyPostID <> -1
Begin
Set @iWhere=@iWhere + 'And MyPostID = ' + convert(nvarchar,@MyPostID )
End
if @MyName <> ' '
Begin
Set @iWhere=@iWhere + ' And MyName Like ' '% ' + @MyName + '% ' ' '
End
Set @sql=@sql + @iWhere
Execute sp_executesql @sql
GO
像我以上的查询功能要防止注入和 ' 要怎么办呢
谢谢 急
------解决方案--------------------if CHARINDEX( 'and ', @MyClass)> 0
Return
------解决方案--------------------帮顶,同样的问题,还没解决思路
------解决方案--------------------防SQL注入我也没多少经验
我现在就是用验证控件验证或用存储过程验证用户输入的数据是否合法,对字符串类型的数据过滤掉 ' select delect insert update 等关键字
另外 连接时不要用SA做连接
------解决方案--------------------字符传进存储过程的时候先做相应的替换吧
------解决方案--------------------