您能否在此代码上显示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() 只允许每个查询一个语句。有没有办法弄乱他数据库中的任何重要内容?(这对我来说是一个挑战,要在实践中证明他的错误)

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

我可以很容易地得到所有的客户端,通过使这个条件总是为真:

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

我什至可以从另一个表中读取详细信息:

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

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

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

在此处阅读第二个和第三个示例:PHP 关于 sql 注入的手册