你能展示这段代码的 SQL 注入示例吗?

Can you show examples of SQL Injection on this code?

我的朋友是 PHP 概念的新手(我也是),他开发了下面的代码。我知道它很脆弱,我告诉他我可以在他的数据库上做一些事情,比如弄乱其他表,更新其他值等。

代码的漏洞部分是一个 INPUT,他将其用于普通搜索。这不是登录。

$email = filter_input(INPUT_GET, 'email');

if ($email != '') {  
   $stm = $db->query("SELECT * from clients WHERE email =  '$email'");
   $result = $stm->fetchAll();
}

问题是我做不到,因为 query() 每个查询只允许一个语句。有没有办法弄乱他数据库中的任何重要内容? (这对我来说是一个挑战,要在实践中证明他的错误)

select 查询不能使用任何 SQL 注入修改数据,但它可以很容易地用于回显来自不同表的数据(如用户名和密码)。

在此处阅读第二个和第三个示例: PHP's manual regarding sql injection

使用您的代码很容易修改 SQL 查询的条件。

通过使条件始终为真,我可以轻松获得所有客户:

http://localhost/inject.php?email=Client 1' OR '1'='1

我什至可以从另一个人那里读到细节table:

http://localhost/inject.php?email=Client 1' UNION SELECT * FROM articles WHERE '1' = '1

这完全取决于您以后如何处理结果,但正如我在这两个简单示例中所示,最好保护自己。