我最近接管了一个php应用程序的维护,我对php不是很熟悉,但是我在网站上看到的一些事情让我担心它可能会受到sql注入攻击。
例如,请参阅此登录管理节的代码的工作原理:

    $password = md5(HASH_SALT . $_POST['loginPass']);
    $query = "SELECT * FROM `administrators` WHERE `active`='1' AND `email`='{$_POST['loginEmail']}' AND `password`='{$password}'";
    $userInfo = db_fetch_array(db_query($query));

    if($userInfo['id']) {
        $_SESSION['adminLoggedIn']  = true;
        // user is logged in, other junk happens here, not important

网站的创建者制作了一个特殊的db_查询方法和db_fetch_数组方法,如下所示:
function db_query($qstring,$print=0)        { return @mysql(DB_NAME,$qstring); }
function db_fetch_array($qhandle)       { return @mysql_fetch_array($qhandle); }

现在,这使我认为我应该能够通过电子邮件地址进行某种SQL注入攻击,如:
' OR 'x'='x' LIMIT 1;

还有一些随机密码。
当我在命令行上使用它时,我会得到一个管理用户,但是当我在应用程序中尝试它时,我会得到一个无效的用户名/密码错误,就像我应该得到的那样。
他们是否可以使用某种全局php配置来阻止这些攻击?在哪里配置?
以下是php——版本信息:
# php --version
PHP 5.2.12 (cli) (built: Feb 28 2010 15:59:21)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
    with the ionCube PHP Loader v3.3.14, Copyright (c) 2002-2010, by ionCube Ltd., and
    with Zend Optimizer v3.3.9, Copyright (c) 1998-2009, by Zend Technologies

最佳答案

我的猜测是,您通过应用程序的尝试被magic quotes阻碍了。
然而,依赖于这种方式是非常糟糕的做法,而且这个应用程序真的应该有更多自己的验证和逃避。

07-24 09:37
查看更多