SQL注入:or 1=1 vs ' or 1=1; ---

-3 sql sql-injection

尝试学习和理解 SQL 注入。

谁能向我解释为什么' or 1=1; --- 允许我绕过身份验证但or 1=1没有?

Cet*_*soz 8

考虑使用字符串连接构建的查询:

"select * from myTable where id = '" + txtIdEnteredByUser +"'"
Run Code Online (Sandbox Code Playgroud)

如果最终用户输入:

' or 1=1; -- 
Run Code Online (Sandbox Code Playgroud)

那么查询就变成:

select * from myTable where id = '' or 1=1; --'
Run Code Online (Sandbox Code Playgroud)

这是一个有效的查询,并且由于 (OR 1=1) 始终评估为 true,因此返回整个表值。

但是,如果用户输入是:

or 1=1; 
Run Code Online (Sandbox Code Playgroud)

查询变为:

select * from myTable where id = ' or 1=1;'
Run Code Online (Sandbox Code Playgroud)

这是不会返回某些内容(可能)的查询。