【发布时间】:2009-08-17 13:29:02
【问题描述】:
好的,我不希望这是一个黑客建议问题,所以请不要对此投反对票。我在一家网店工作,我发现我们的一些旧 PHP 页面很容易受到用户名中的 SQL 注入的影响,我想知道有多糟糕。
我们使用 PHP 字符串将来自 POST 的用户输入嵌入到登录表单中。
$uname = $_POST['username'];
$pass = md5($_POST['pass']);
$sql = "SELECT * FROM users WHERE username='$uname' AND password='$pass' AND userlevel='user'";
...
然后我运行查询。
现在,我不是 SQL 专家,我只是在 phpMyAdmin 上使用我可以拼凑的东西。但是我可以在没有用户名的情况下登录,而是使用:
' OR 1 '
我知道要转义用户输入,我使用mysql_real_escape_string。
我的问题是,这段代码有多脆弱,有人可以登录这个页面而不需要密码吗?我想也许他们不需要用户名,但只能暴力破解密码。但我不是 SQL 专家,我想知道是否可以对我们使用一些技巧。
我们使用 MySQL。
我不需要任何关于输入验证的讲座,我知道这有多糟糕。我们应该做很多事情,比如页面上的超时和锁定,这样它就不会被暴力破解。
【问题讨论】:
-
什么是登录逻辑?如果 mysql_num_rows(query) == 1 可以吗?您必须获取密码(取决于用户名),然后检查密码是否相等...
-
对不起,我投票结束。您在帖子中回答了自己的问题。
-
嗯,不,我没有。我在问这是多么容易受到攻击,以及他们是否可以在没有密码的情况下登录。我还不清楚。