php - SQL注入(inject)理论

标签 php mysql security sql-injection database-theory

我一直在数据库中使用 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/

相关文章:

php - 在mysql中动态更改字段顺序

PHP 和 MySQL 性能 - 一个大查询与多个小查询

php - Symfony 4 简单的 form_login 不起作用

mysql - 自动更新队列优先级

php - 多个数据库连接(不需要)

android - 用于 NFC 设备身份验证的 AES 与 3DES (Mifare)

php - 如何重定向到(或强制执行)SSL 连接?

mysql - XAMPP 文件夹中 MySQL 数据库表的确切位置是什么?

security - OAuth 和 SSO 功能

java - 操纵密码