这个PHP代码可以注入sql吗?

时间:2014-11-13 19:17:08

标签: php mysql sql-injection

我正在尝试学习SQL注入成为白帽子,但我觉得很难......

我在一个网站上发现了这个代码,并且它被告知是一个容易解决的问题。

HTML代码有一个用户名,密码框和一个按钮。

if(isset($_POST['autentificare']) && $_POST['autentificare']=='OK' && $_POST['admin']!="" && $_POST['adm_password']!="")
{
    $admin=$_POST['admin'];
    $adm_password=$_POST['adm_password'];
    $login="SELECT admin,password FROM owner where admin='".$admin."' AND password='".$adm_password."' ";
    $result_auth=mysql_query($login,$db) or die("Query failed: ".mysql_error()." Actual query: ".$login);
    $user_identity;
    while($dates = mysql_fetch_object($result_auth))
    {
        $user_identity=$dates->admin;
        $password_ident=$dates->password;
    }
    if($result_auth && $user_identity==$admin && $password_ident==$adm_password)
    {
        $_SESSION['adm_username']=$admin;
        $_SESSION['adm_password']=$adm_password;
        $authval="V";
    }
    else
    {
        $authval="D";

    }


}

3 个答案:

答案 0 :(得分:1)

是。您的查询是SQLi易受攻击的。我强烈建议使用PDO。它负责为您提供转义查询。 http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers#Named_Placeholders

答案 1 :(得分:1)

针对SQL注入的最佳“武器”是准备好的语句。 通过这种方式,您不会像在上面的查询中那样将代码与数据混合在一起。

当然......你很容易受到SQL注入攻击。

通过混合代码和数据,攻击者可以通过这样的方式发送输入,实际上可以改变查询的形式。

答案 2 :(得分:0)

从安全/ sql注入角度看代码的明显问题:

  1. 数据未经清理。无论何时您从用户那里获取输入并在查询中处理它,您都希望通过编码任何特殊字符来清除它。有很多功能可以做到这一点,因为你是一名学生,我会让你研究这一点(学习如何为你的目的找到功能是开发中的一项重要技能)。

  2. 您没有使用绑定参数(并且您不应该使用$ mysqli)。绑定参数有助于以应用程序知道所期望的输入类型的方式构建查询。它阻止人们将子查询隐藏到您的代码中。

  3. 密码以未加密状态存储。密码应该始终加密,因此如果它们被盗,就不会像未加密一样坏。

  4. 这应该让你开始。