Hackable sql查询

时间:2014-01-11 06:10:41

标签: php mysql sql-injection

我正在运营一个我购买的网站,我认为这个网站相当不容易。然而,在发生攻击后,我发现它不是。他告诉我这个漏洞,但我的问题是用户输入可以用来获取所有用户的用户名吗?这是代码......

$un=$_GET['username'];
$q=$db->query("SELECT * FROM users WHERE login_name='$un' OR username='$un'");

我意识到这是非常可怕的。因此,我将网站更改为准备好的语句,以防止再次发生这种情况。我只是想知道他可以输入什么来获取所有用户的用户名。

有人在github上发布了这个脚本,你可以在这里找到它: https://github.com/sat312/Mafia-Game-Script/blob/master/checkun.php

3 个答案:

答案 0 :(得分:2)

您从用户那里获得$un,因此我可以输入任何我想要的内容,它将被替换为您的查询。它被称为SQL Injection攻击。

让我们说$un = ' OR 1 = 1;--然后您的查询变为:

SELECT * FROM users WHERE login_name='' OR 1 = 1;--' OR username='' OR 1 = 1;--'

会发生什么?这会被执行:

SELECT * FROM users WHERE login_name='' OR 1 = 1;

这将返回表格中的每一行。

答案 1 :(得分:2)

' OR 1=1;

在网址中:

/yourScript.php?username=%27%20OR%201%3D1%3B

这个想法是,由于数据与命令混合在一起,你可以用数据完成命令。

答案 2 :(得分:1)

他可能在MySql中使用了GROUP_CONCAT语句,该语句基本上将多行中的列分组为一行(有关详细信息,请参阅Can I concatenate multiple MySQL rows into one field?)。他可能已经终止了原始的SQL语句,或者用自己的UNIONED UNIONED,并添加了LIMIT和ORDER BY以确保他的结果被返回并注释掉原始语句的剩余部分。

这是一种可能性,但可能还有其他一些。