Geçenlerde bir PHP uygulaması bakım devraldı ve ben bir SQL enjeksiyon saldırısına karşı savunmasız olabilir süper PHP ile tanıdık ama ben sitede görmeye oldum bazı şeyler beni sinir yapıyoruz değilim.
Örneğin, idari bölüme giriş için bu kodu nasıl çalıştığını görmek:
$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
Sitenin yaratıcıları burada gösterilen, özel db_query yöntem ve db_fetch_array yöntemini yaptı:
function db_query($qstring,$print=0) { return @mysql(DB_NAME,$qstring); }
function db_fetch_array($qhandle) { return @mysql_fetch_array($qhandle); }
Şimdi, bu bana böyle bir e-posta adresi ile SQL injection saldırısı çeşit yapmak mümkün olmalıdır düşündürüyor:
' OR 'x'='x' LIMIT 1;
and some random password. When I use that on the command line, I get an administrative user back, but when I try it in the application, I get an invalid username/password error, like I should.
Onlar bu saldırıları engellemek için sağlamıştır küresel PHP yapılandırması çeşit var olabilir mi? Nerede bu yapılandırılmış olacaktır?
İşte PHP - sürüm bilgileri:
# 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