SQL 注入與動態 SQL

動態查詢是

SET @sql = N'SELECT COUNT(*) FROM AppUsers WHERE Username = ''' + @user + ''' AND Password = ''' + @pass + ''''
EXEC(@sql)

如果使用者變數的值為 myusername’‘OR 1 = 1 - 將執行以下查詢:

SELECT COUNT(*)
FROM AppUsers 
WHERE Username = 'myusername' OR 1=1 --' AND Password = ''

變數 @username 的值末尾的註釋將註釋掉查詢的尾隨部分,並且將評估條件 1 = 1。在此查詢返回的至少一個使用者檢查它的應用程式將返回大於 0 的計數,並且登入將成功。

使用此方法即使攻擊者不知道有效的使用者名稱和密碼,也可以登入應用程式。