我是否可以通過轉義單引號和用單引號包圍用戶輸入來防止SQL注入?我意識到,在構建包含用戶輸入的查詢時,參數化SQL查詢是對用戶輸入進行清理的最佳方法,但我想知道接受用戶輸入和轉義任何單引號并用單引號包圍整個字符串有什么問題。下面是代碼:sSanitizedInput = "'" & Replace(sInput, "'", "''") & "'"用戶輸入的任何單引號都將替換為雙引號,這將消除用戶結束字符串的能力,因此他們可能鍵入的任何其他內容(如分號、百分比符號等)都將是字符串的一部分,而不是作為命令的一部分實際執行。我們使用的是MicrosoftSQLServer 2000,我認為單引號是唯一的字符串分隔符,也是轉義字符串分隔符的唯一方法,因此無法執行用戶鍵入的任何內容。我看不出有什么方法可以針對這種情況發起SQL注入攻擊,但我意識到,如果這像我所認為的那樣防彈,其他人就會想到這一點,這將是一種常見的做法。這個密碼怎么了?是否有辦法使SQL注入攻擊超過這種消毒技術?使用此技術的示例用戶輸入將非常有用。最新情況:我仍然不知道如何有效地針對這段代碼發起SQL注入攻擊。有幾個人建議反斜杠會轉義一個單引號,讓另一個單引號結束字符串,以便字符串的其余部分作為SQL命令的一部分執行,我意識到這個方法可以將SQL注入MySQL數據庫,但是在SQL Server 2000中,我能夠找到的唯一方法是用另一個單引號來轉義單引號;反斜杠不能做到這一點。而且,除非有一種方法來停止轉義單引號,否則將不會執行其余的用戶輸入,因為它都將被視為一個連續字符串。我知道有更好的方法來消毒輸入,但我更感興趣的是學習為什么我提供的方法不能工作。如果有人知道針對這種消毒方法進行SQL注入攻擊的任何具體方法,我很樂意看到它。
3 回答

森欄
TA貢獻1810條經驗 獲得超5個贊
“如果有人知道針對這種消毒方法進行SQL注入攻擊的任何具體方法,我很樂意看到它?!?/trans>
SaniizedInput=“‘”&替換(sInput、“’”)和“‘”
如果基于從數據庫檢索的數據重新生成sql查詢,則為二階sql注入。 逃出
,數據未經轉義就連接在一起,可能是間接注入SQL的.看見 字符串截斷-(稍微復雜一點)-場景是有兩個字段,比如用戶名和密碼,SQL將這兩個字段連接起來。這兩個字段(或者僅僅是第一個字段)都有一個嚴格的長度限制。例如,用戶名限制為20個字符。假設你有這樣的代碼:
username = left(Replace(sInput, "'", "''"), 20)
sSQL = "select * from USERS where username = '" + username + "' and password = '" + password + "'"
- 3 回答
- 0 關注
- 884 瀏覽
添加回答
舉報
0/150
提交
取消