SQL注入利用登录表单

时间:2013-07-20 14:59:11

标签: sql sql-injection

我在测试我的网站时想知道用户可以通过在以下查询中进行进一步修改来从我的数据库中获取数据

SELECT * FROM users WHERE login='admin' AND password='1' OR '1'='1';

前提是他知道admin用户名,并使用'1'='1'密码来破解它。

他还可以添加什么来回显屏幕上的密码或查找表格详情?

我想这样做是为了理解不受保护的SQL可能会对我的SQL注入演示文稿造成伤害的限制

5 个答案:

答案 0 :(得分:3)

假设:

 ' OR '1'='1';

是一个黑客攻击,如果输入没有被清理,那么可能是无穷无尽的,例如:

' OR '1'='1'; drop table users;

等。

答案 1 :(得分:1)

表单注入用户名和密码框应如下所示.. z'OR'x'='x ..... 但攻击者可以使用网址注入技术从您的网站获取信息

答案 2 :(得分:0)

这个SQL查询: -

SELECT * FROM users WHERE login='admin' AND password='1' OR '1'='1';

评估为SELECT * FROM users WHERE login='admin' AND TRUE

因此,它会选择login column值为 admin 的行。它可以用来绕过登录。它有一个严重的SQL注入漏洞。

最好使用准备好的声明 SQL注入的问题是,用户输入用作SQL语句的部分。通过使用预准备语句,您可以强制用户输入作为参数内容处理(而不是作为SQL命令的一部分)。

答案 3 :(得分:0)

保护自己免受SQL注入的最佳方法之一是使用 PreparedStatement 而不是语句

答案 4 :(得分:0)

如果您对密码进行加密和散列(而不是直接将其存储在表中),则用户无法通过密码注入SQL。

如果您的表格如此:

TABLE users:
+-------+-----------+---------------------------+---------------...
| login |   salt    |         password          | other columns ...
+-------+-----------+---------------------------+---------------...
| foo42 | 231732156 | d4154b1134b511a5461efe423 |               ...
| bob69 | 765219179 | bba3ef876fe78ebacdccd87ff |               ...
+-------+-----------+---------------------------+---------------...

然后你可以存储"密码"用户第一次通过生成一次性随机盐来创建其帐户,将其附加到用户提交的密码的末尾并对其进行散列。现在,每当用户尝试登录时,您只需重新计算哈希并根据存储的密码进行检查。这样,如果需要,他们可以使用' or '1' == '1之类的密码,但您的服务器只会使用哈希(例如,可能看起来像bba3ef876fe78ebacdccd87ff