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

时间:2015-01-25 12:32:18

标签: php sql-injection

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

代码中易受攻击的部分是INPUT,用于常见搜索。这不是登录。

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

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

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

2 个答案:

答案 0 :(得分:0)

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

在这里阅读第二和第三个例子: PHP's manual regarding sql injection

答案 1 :(得分:0)

使用您的代码可以很容易地修改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

这一切都取决于你以后对结果做了什么,但正如我在这两个简单的例子中所表明的那样,保护自己会更好。