Ben bir kullanıcı dinamik URL'den belirlenen bir dosya indirmek için izin gereken bir durum yaşıyorum. Indirme başlamadan önce, bazı kimlik doğrulaması yapmak gerekir, bu yüzden indirme ilk bir komut dosyası ile çalışmak zorundadır. Tüm dosyalar manuel indirilmesini engellemek için web kök dışında saklanır.
Örneğin, aşağıdakilerden herhangi birini indirme bağlantıları olabilir:
- http://example.com/downloads/companyxyz/overview.pdf
- http://example.com/downloads/companyxyz/images/logo.png
- http://example.com/downloads/companyxyz/present/ppt/presentation.ppt
Temelde, klasör derinliği değişebilir.
To prevent a directory traversal, like say: http://example.com/downloads/../../../../etc/passwd I need to obviously do some checking on the URI. (Note: I do not have the option of storing this info in a database, the URI must be used)
Aşağıdaki sıradanifade bir kullanıcı balık şey girmezse emin kurşun geçirmez olacaktır:
preg_match('/^\/([-_\w]+\/)*[-_\w]+\.(zip|gif|jpg|png|pdf|ppt|png)$/iD', $path)
Eminim URI aklı başında yapmanın başka ne gibi seçenekler var? Muhtemelen PHP realpath kullanıyor?