我一直在数据库中使用 ORM 层,所以我不介意 SQL 注入(inject),但是一个 friend 给了我这个任务,我仍然不知道如何解决它。
我知道 PHP 脚本只是检查查询的返回值是否为 != null(找到与输入的用户名和密码匹配的用户名)。
PHP 中的查询本身如下所示:
$sql = "SELECT name FROM users WHERE name='".$name. "' AND password='".$password. "'";
获得此查询返回的最佳方法是什么 != null 或检索有效登录数据(用户名和密码)。密码明文存储在数据库中。我知道存储 plain 不好,我知道使用 PDO 很好,但我不知道如何解决他给我的这个有趣的任务,可能是因为我一直在使用 PDO。
最佳答案
假设我们有这两个输入变量:
$name = "iam";
$password = "aninjection";
导致此查询的结果:
$sql = "SELECT name FROM users WHERE name='iam' AND password='aninjection'";
现在假设我们将其添加到 $password
变量中:
$password = "aninjection' OR 1='1";
结果是:
$sql = "SELECT name FROM users WHERE name='iam' AND password='aninjection' OR 1='1'";
此查询现在将返回 true
并显示用户表中的每个名称。
这当然是一个基本的例子。我们还可以通过删除整个表来造成更大的伤害。
关于php - SQL注入(inject)理论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35064656/