删除可能导致SQL注入的字符的函数

时间:2016-12-23 12:39:20

标签: sql-server-2008 sql-injection sp-executesql

我需要在存储过程中使用动态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 个答案:

答案 0 :(得分:2)

  

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

没有这样的功能,它不能

仅仅因为没有"字符可以导致sql注入"。注射中使用的所有字符都是完全合法的。你对SQL注入的想法是错误的。它不是查询的外来东西,如病毒或细菌,而只是常规SQL。因此,您所能做的就是禁止在SQL查询中使用的字符,这将使此功能有效地擦除您的查询。

您认为非法的func isParformPinch(recognizer:UIPinchGestureRecognizer, forTag tag:Int, protectedTag protact:Int){ if protact == tag{ return } // Declare your local function func myLocalFunction() { if isPinching(forView: imageArray[tag],inView: recognizer.view!, fromTransformation: recognizer.scale) { imageArray[tag].transform = imageArray[tag].transform.scaledBy(x: recognizer.scale, y: recognizer.scale) } } // Execute your function whenever you need to myLocalFunction() if recognizer.state == .ended { // call again above condition myLocalFunction() } } 声明中的哪个字符?

答案 1 :(得分:1)

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

select public_details
from users
where ID = 5

ID是您从用户获得的值。允许用户选择他们正在搜索的ID是不安全的,但是为了示例,让我们暂时忽略它。现在,如果用户发送如下帖子

5 or 1=1

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