Filtresiz girişi ile kullanmak için PHP'nin fonksiyonları nasıl güvenlidir?

9 Cevap php

Belki biraz paranoyak oluyorum, ama ben bir iletişim modülü tekrar yazıyorum gibi, akla şu soru geldi:

Ben PHP'nin fonksiyonları filtresiz girişini kullanabilir miyim?

Bu ekran bir veritabanı, çıktı, vb koymak için malzeme sterilize etmek kolaydır fakat örneğin aşağıdaki deyim tehlikeli olabileceğini merak ediyordum:

    if (file_exists($_POST['brochure'])) {
        // do some stuff
    }

Birisi bir şekilde bu sayfaya göndermek başardı ise, yukarıdaki kodu yararlanılabilir?

Yukarıdaki kod sadece bir örnektir, ben bir form işlerken kullandığım diğer fonksiyonların düşünebilirsiniz.

Edit: Herkes teşekkürler, örnekte File_exists aslında bir sanitasyon işlevinin bir parçası ama temizlerken hızla hale geliyor, bu yüzden php fonksiyonları bir tavuk ve yumurta hikayesi kullanılmaktadır: fonksiyonlarını kullanmak için, ben var temizlemek, ama temizlemek için ben işlevleri kullanmak zorunda.

Her neyse, ben şimdi bazı yeni fikirler var.

9 Cevap

Yep. Ben yapmak lazım bütün post "/ etc / passwd", ya da sayfa (ya da bir şey) "/ dbconnection.php içerir" ve //do some stuff aslında, ben belki silebilir ne bağlı , değiştirmek ya da hassas bilgileri okuyun. file_exists function kendisi istemem hiçbir şey yapmayacağım, ancak sömürme mantığı kötü niyetli kullanıcıların bekleyebilirsiniz.

Always kullanıcı girdileri. Eğer sadece belirli bir klasördeki dosyaları kapmak için bekliyorsanız Always. , izin vermezler .. ya / giriş

Kendisi tarafından, bu makul güvenli görünüyor, ama o bilgiyi ortaya çıkarmak için kullanılabilir. Bu bir saldırı varlığı (ya da yokluğu) belirli dosyaları (örneğin, /etc/passwd, /proc/*, vb) kontrol etmek için izin verebilir.

Yani bu örnekte, bu $_POST['brochure'], sadece potansiyel olarak geçerli dosya adları eşleşen girişleri kabul ilk dezenfekte sağlamalıdır. .. içeren herhangi bir giriş damla ya da bir / ile başlar.

Diğer fonksiyonlar potansiyel olarak çok daha kötü yan etkileri olabilir ...

PHP'nin yerleşikleri kötü girişindeki "beklenmeyen" şeyler (örneğin, file_exists("foo; rm -r /") diyecekler "hayır, dosya 'foo; rm-r /' yok") yapmayacağım ... Ve eğer yapmak, size Zend karşı dava bir hata var.

Tabii ki, bu doesn't your kod istismar insanları durdurmak (örneğin, file_exists("../hidden/shell.php")), böylece gerekir hala (aslında, siz [) (3] {gerektiği }) etrafında, kullanıcı girdileri ile geçerken dikkatli olun.

olabilir 'broşür' = '.. /.. /.. /.. / .htaccess'

Bu ilginç bir soru.

Apache benim bilgisayarda. Ht * listeleme veya görüntüleme inkar ayarlayın ve. Ini ve. Php.inc dosyaları, ama sen şimdi bana endişe edilmektedir.

Eğer gerçekten tüm giriş filtreleme alışkanlığı olmalıdır, ancak varsayılan (OpenSUSE, Mandriva ve Debian birçok ikili dağıtımlarda bir sertleşme yama ve 'Suhosin', dağıtır http://www.hardened-php.net/ hangi kontrol etmek isteyebilirsiniz / Ubuntu)

Sormak zorunda olduğu gerçeği senin cevaptır. Güvenli değil.

file_exists() diğerleri kadar kötü değil, ama sen verileri geçen konum fonksiyonu için kaynak kodu görmek ve kullanıcı girişi nasıl işlediğini bilmiyorsanız, o zaman bir şans alıyorsun.

Bu herhangi bir php dosya sistemi komutu içine filtresiz kullanıcı verilerini geçirmek için iyi bir fikir değil. Güvenlik anahtarı içerik anahtarı girdi asla izin olmasıdır. Bu durumda, minimum sanitization yolu karakterleri kaldırarak edilmelidir.

Her zaman kaynak kodu gördüm eğer onlar muhtemelen yapabileceği bir düşman kullanıcı ve kötü varsayalım.

Yıllar içinde güvenlik açıkları fonksiyonları Suhosin / risk bazı kaldırmak için PHP yamalı bir proje olduğunu bir tarzı saldırıları bufferoverflow için suseptable vardı öyle ki, PHP kendisi kaynağı bulunmuştur.

Ben de tüm bu işlevleri güven olmaz.

Ben yakından kaydedilmesini de insanlar ve onların C kod kalitesini izlemek ancak bu kesinlikle son sekiz yıldır, ben sadece sürekli korku içinde değilim, vb döner, çarpıcı gelebilir.

Ne veritabanı dize ile olur alınmadan ve bir yerde bir güvenlik açığı olduğu kullanılabilir olmasıdır. Sorunuzun cevabı için, dize saklamak uzaklaştırma adımı düşünmek ve sonra almak. Bunu hemen kullanın ve aynı riskleri var.