PHP -

4 Cevap php

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

4 Cevap

Benim tahminim uygulaması yoluyla girişimleri magic quotes tarafından bertaraf ediliyor olmasıdır.

Böyle dayanarak, ancak, son derece kötü bir uygulama olduğunu ve bu uygulama gerçekten çok kendi doğrulama daha kaçan olmalıdır.

(Bu kullanarak mysql yorumdur ve / * almak için blok: Bu sorun neler yapabileceğini tüm veri iyi bir doğrulama olması gerekir, ve gibi her güvenli olmayan karakter için '\ böyle daha önce ters eğik çizgi eklemeniz gerekir' enjeksiyonundan sonra comment sonraki sql statments için sql enjeksiyon.

Eğer sunucu üzerinde $ _POST ['loginEmail'] echo ve saldırı çalışırsanız büyük olasılıkla magic_quotes açık olduğunu göreceksiniz.

O açıksa o \ gibi bir şey 'YA \' x \ '= \' x olacak

Tüm SQL querys üzerinde PDO sınıfını (http://www.php.net/manual/en/pdo.prepare.php) kullanmalısınız.

Sen sihirli tırnak ile etkin olsaydı belirlemek için çalıştı bir yorumda bahsetti:

<?php get_magic_quotes_gpc(); ?>

Muhtemelen bunun yerine yapmak gerekiyordu:

<?php echo get_magic_quotes_gpc(); ?>

En olası durum diğerleri söylediler gibi sihirli tırnak açık olduğunu, olarak görünmektedir.