通过我不太了解的mysql查询破坏了安全性

时间:2015-10-12 14:04:26

标签: php mysql security

我一直在创建旧网站。最近,用户告知我们可能存在的安全漏洞。

长话短说,当尝试登录并使用'=' 'or'作为密码或用户名时,将执行以下查询。

SELECT * FROM `table-goes-here` WHERE `username` = ''=' 'or'' AND `password` = 'some-hash-goes-here'

此查询将选择该表中的所有内容,并允许在没有任何实际有效凭据的情况下登录。

我只是维护网站,我之前已经与业主谈过这些安全漏洞,他不会听。

我想知道的是这究竟是一个有效的查询以及它究竟是做什么的(最好是一步一步地向我解释,就像我' m 5版本)。我的MySQL知识并不是最好的。

我非常清楚这是一个SQL注入。我知道如何准备语句,但它们显然不在预算中。我只是想知道它究竟做了什么。即这一部分。我之前从未见过这种语法,谷歌搜索并没有真正帮助,因为我不知道我究竟在寻找什么。

`username` = ''=' 'or''

3 个答案:

答案 0 :(得分:4)

你正在实际运行

SELECT * FROM table WHERE (username= '' = '') or ('' AND password="");

和(user_username =''='')计算结果为true ...尝试

SELECT  (username= '' = '') FROM table;

和(''AND password =“”)也评估为true ...尝试

Select ('' AND password="") FROM table;

也评估为true所以...显示所有内容

答案 1 :(得分:1)

我认为它的工作方式是这样的,首先要证明这一点 username = ''这会返回false或0然后其他部分来 0 = ' '

你可以从mysql看到

https://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_equal

如果将字符串与0(零)进行比较,则返回1(true) 结果:

SELECT 'blabla' = ''; // returns 0
SELECT 0 = ' '; // returns 1

答案 2 :(得分:0)

查询基本上会评估为true并返回所有记录。

所以,会发生的事情是黑客会以ID首先存储在数据库中的用户身份登录。

当然,它不会向黑客显示数据库,因为你不会在任何地方回显任何数据库内容,但只需稍加修改,黑客就可以设法以任何用户身份登录,而不仅仅是第一个用户

阅读以下内容以防止此类攻击How can I prevent SQL injection in PHP?

更多信息 - http://www.w3schools.com/sql/sql_injection.asp

编辑 - 黑客还必须在密码字段中使用类似的技巧,否则它会变错。