我试图通过绕过我自己的登录页面来练习sql注入但是我不知道如何让它容易受到sqli的攻击,你能告诉我该怎么做吗? 这是php代码:
function pulsate()
{
// ...
.each("end", pulsate);
}
答案 0 :(得分:1)
我希望这可以给你一个线索。
这是您的查询:
$query = "SELECT * FROM `users` WHERE username='$username' and password='$password'";
输入1 = 1不会绕过它。只需拿一张纸和一支铅笔,想象一下你的查询会是什么样子。在你的情况下将输出:
SELECT * FROM users WHERE username = '1 = 1' AND password = '1 = 1'
查询是正确的,虽然没有名为'1 = 1'的用户名,密码为'1 = 1'。
现在的漏洞:
您需要传递用户和密码参数,这是一个可以欺骗查询的字符串。
例如:
x' OR '1' = '1
什么会产生这种输入?
SELECT * FROM users WHERE username = 'x' OR '1' = '1' AND password = 'x' OR '1' = '1'
如何防止这种注射?取自OWASP
主要防御:
选项#1:使用准备好的语句(参数化查询)
选项#2:使用存储过程
选项#3:转义所有用户提供的输入
额外防御:
同时强制执行:最低权限
同时执行:白名单输入验证