Я недавно взял на себя обслуживание приложения 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:
# 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