PHP magic_quotes_gpc güvenlik açığı

3 Cevap php

Ben şirketin mirası webapps birine atanmış oldum, ve bir gün kaynağının çevresinde alay ya da iki sonra, aşağıdakine benzer bir SQL enjeksiyon vektörü buldum:

mysql_query("SELECT * FROM foo WHERE bar='" . $_GET['baz'] . "'");

Ben buna karşı bir SQL enjeksiyon testi gerçekleştirmek için denedim, ama nedeniyle PHP'nin magic_quotes_gpc modül açık olmanın, başarısız olur.

I magic_quotes_gpc dirty olduğunu biliyoruz, ama biz yüzlerce var - Yukarıda benzer satır kod - değilse binlerce. Biz sadece bu saldırı için geniş açık böyle kod bırakmak gibi, magic_quotes_gpc kapatmak için göze alamaz.

Ben yukarıdaki kodu nasıl 'exploit' bilmek istiyorum, ve ister biz hemen bunu düzeltmek, ya da diğer üstlenmeden görevleri ile de sabitleme görevi içermelidir.

3 Cevap

Uzak siteleri geçiş zamanki gibi magic_quotes_gpc bir sarıcı işlev eklemek için:

function m($s) {
    if (get_magic_quotes_gpc())
        $s= stripslashes($s);
    return mysql_real_escape_string($s);
}

mysql_query("SELECT * FROM foo WHERE bar='".m($_GET['baz'])."'");

Bu addslashes karakter-set-farkında olduğu bazı durumlarda savunmasız olmasına neden olabilir olmama sorunu çözecektir, ve genellikle kod eskisi gibi 'iş' devam yapacaktır.

Eğer veritabanına takmadığınızdan giriş dizeleri içine eğik çarpma, ve diğer kaynaklardan veritabanına takıyor dizeleri kaçmak için başarısız olacaktır Ancak uzun vadede girdi-kaçan dayanarak, sürdürülemez olduğunu. Bu giriş aşamasında bir çıkış aşamalı kodlama uygulayarak ediyor: Bu gerçek nedeni magic_quotes_gpc yanlış şey olduğunu.

Yani sarıcı işlevi ekleyin ve sonra yavaş yavaş bunu kullanmak için tüm SQL interpolations güncellenmesi geçmesi. Hepsini var zaman sihirli tırnakları açabilirsiniz.

Sürece sihirli tırnak vardır, ve bunun üzerinden bir şeyler kayma olabilir bazı özel karakter kodlaması kullanmayan yok gibi, ince olmalı - tabiri caizse. Sebebi ne olursa olsun sihirli tırnak düzeltmek için delik bir şey var olacak (sunucu değişikliği, konfigürasyon değişikliği) aktif olmadığı zaman sorundur.

Ben sunucu yapılandırmasında devre dışı da eğer, emin magic_quotes etkindir yapar başında bir satır eklemek istiyorum. Sonra daha fazla veya daha az güvende olacak.