2016-12-23 111 views
0

我需要在存储过程中使用动态SQL。删除可能导致SQL注入的字符的函数

动态SQL将创建SQL对象,因此我无法对其进行参数化并使用sp_executesql执行它。

是否有一些SQL函数会检查存储过程参数变量并告诉我是否有一些非法字符?或删除它们或有这些字符的列表?

喜欢的东西

DECLARE @variable = 'password OR 1=1' 

IF IsSqlInjectionPossible(@variable) 
BEGIN 
    RAISERROR('Illegal input characters',16,1) 
    RETURN 
END 

SET @variable = removePossibleSqlInjection(@variable) 

你怎么做呢?

回答

2

是否有一些SQL函数会检查存储过程参数变量并告诉我是否有一些非法字符?

有没有这样的功能,它只是不能

只是因为有NO“字,可能会导致SQL注入”。注射中使用的所有字符都是完全合法的。你对SQL注入的想法是错误的。它不像查询那样陌生,像病毒或细菌,而只是常规的SQL。所以你所能做的就是禁止在SQL查询中使用的字符,这将使这个函数有效地清除你的查询。

'password OR 1=1'您认为非法的声明是什么字符?

1

让我们考虑你有一个表格,用户可以询问他们的朋友的公共数据。让我们进一步假设表单发布一个ID,并将其用作查询中的数值:

select public_details 
from users 
where ID = 5 

ID是您从用户处获得的值。让用户选择他们正在搜索的ID是不安全的,但现在让我们忽略这个例子。现在,如果用户发送如下帖子

5 or 1=1 

没有非法字符,甚至没有撇号。因此问题是这是一个商业逻辑问题,应该在应用程序级别解决。