我需要在存储过程中使用动态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)
你是怎么做到的?
答案 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
没有非法的角色,甚至没有撇号。因此,问题是这是一个业务逻辑问题,应该在应用程序级别解决。