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 的计数,并且登录将成功。

使用此方法即使攻击者不知道有效的用户名和密码,也可以登录应用程序。