2016-12-23 145 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 

沒有非法字符,甚至沒有撇號。因此問題是這是一個商業邏輯問題,應該在應用程序級別解決。