我最近接管了一个PHP应用程序的维护,并且我对PHP不是很熟悉,但是我在网站上看到的一些事情让我感到紧张,因为它可能容易受到SQL注入攻击。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 - 版本信息:
# 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
哦,我的问题。从来没有想过我讨厌回答:) – 2010-04-26 17:19:58
你试过注射吗? – Ben 2010-04-26 17:22:11
如果您最终关闭magic_quotes_gpc并进行正确转义,请仔细查看通过文件系统连接使用的任何用户输入。魔术引号的目的不是为了保护你,但这是许多业余剧本在不知不觉中依赖的副作用。未转义的空字节与php的文件系统功能真的很不好... – goat 2010-04-26 19:38:23