Php fwrite Güvenlik açıkları?

7 Cevap php

Geçenlerde bir hosting şirketleri (IIS) bizim in-house sunucuları (Apache) üzerinde benim şirketlerin web sitesi geçiş. Aslında site inşa grup sidik kötü bir iş yaptı ve tüm şey geçirmek için bir karışıklık oldu. Hareket error_log bakarak, oldukça sorunsuz gitti sırasında bazı sayfalar eksik hala var.

Sadece zaman 404 aşağıdakileri yapmak için daha kolay olabilir diye merak ediyordum - biz yaklaşık 15 ya da öylesine biz bu sunucularda barındırmak zorunda - Aksine sürekli bu alanla ilgili hataları "Dosya yok" için error_log ile grep zorunda daha hata oluşuyor:

  • bir php sayfasına yönlendirmek ve orijinal URL isteği geçmek
  • Yeni php sayfa bir günlük-ish dosyasının URL'sini dökümü var

Bunu yazarken ben bu değerli bir girişim olduğunu daha az ikna oluyorum. Yatan soru olursa da, w fwrite / potansiyel güvenlik sorunları vardır? O giriş bir dosyaya eklenmiş olacak eğer kullanıcı girişi fırçalamadan herhangi bir tür olması gerekiyor mu? Bu giriş o değer ne olursa olsun bir veritabanına yanına gidiyor olmaz. Şimdiden teşekkürler.

7 Cevap

Sürece you size yazıyoruz dosyasını tek belirleyici olarak (and not determining that from the URL), fazla risk olmamalı: Eğer kullanıcıdan alırsınız tek şey 'içerik ll dosyaya yazmak ve bu dosyayı çalıştırmak, ama sadece okumak yoksa, oldukça Tamam olmalıdır.

404 hataları bu şekilde oturum açma fikri yeni değildir: Ben oldukça birkaç kez yapılır ve (biggest problem I saw was a file that became big quite fast, because there were far too many errors ^^ ) onunla herhangi bir büyük sorunla karşı karşıya asla gördüm

Örneğin, Drupal bu biraz yapar: 404 hataları günlüğe - ama bir veritabanına, bu yüzden web arabirimini kullanarak bunları analiz etmek daha kolay.

Well, just the usual filesystem stuff: don't let the user specify where the file will go: things like script.php?filename=../../../../../../../etc/passwd shouldn't even have a chance of writing to /etc/passwd (also the script shouldn't have FS permissions for that). Other than that, fwrite() doesn't have any special chars that would allow it to jump into some sort of command mode.

Ayrıca, 404 sayfa (httpd.conf) oldukça basittir:

ErrorDocument 404 /error_page.php

ve sadece bir dosyaya REQUEST_URL dökümü

fwrite oldukça güvenli olmalıdır.

Alternatif genellikle sayfaları bulunmayan bazı listeler erişim log analiz kullanabilirsiniz.

O yapıyor bütün diske yazarken eğer, dışarıdan gelen tek şey birisi diske yazmak için elde etmektir. Açıkçası, dosya adı geçersiz url ile geçti alır bir parametre olmamalıdır. Bazı biri sadece gerçekten uzun URL'ler ile geçersiz sayfa istekleri ton göndererek yararlanmaya çalışabilir. Ama onlar bunu yaptıklarını biliyor ve sadece genel saldırılar olduğunu daha etkili olacak diğer yollar varken yeterli bakım gerekir.

HTML (ya da kod gömülü izin umulur diğer dosya türü) olarak günlükleri yazarken eğer dışarı bakmak için potansiyel bir sorun var olduğunu. Bu dosya tabii XSS saldırılarına karşı savunmasızdır.

Ortak bir logfile saldırı gömülü zararlı javascript içeren URL'leri talep etmektir. Bu URL'ler herkes bir web tarayıcısında dosyayı görüntülediğinde sonra yürütülecek bir günlük dosyasına doğrudan yazılır.

  1. Yazdığınız dosya, web sunucusu tarafından HTML olarak hizmet edilemez sağlamak
  2. URL-kodlama veya HTML-kodlayan URL'leri düşünün.

Zaten error_log yılında 404 hataları kayıt edilmelidir.

Tüm yollarla kullanıcıya dostça hata mesajı vermek için bir özel hata işleyicisi kullanabilirsiniz, ancak bu site ciddi verim her türlü görürse, o zaman komut fwrite kullanarak iyi bir fikir değildir. PHP özünde eşzamanlı dosya erişimi desteklemek semantik kilitleme sofistike dosyasının tür yok - ama webserver sizin için bilgileri kayıt olduğundan, neden rahatsız?