最近我接手了一个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_query方法和db_fetch_array方法,如下所示:
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 --version信息:
# 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