PHP Dosya Yükleme Güvenli İyi Yolu

1 Cevap php

(among other things), kullanıcıların ilanı / sunumun parçası olarak (like an image, a .doc or a text file) bir dosya yüklemek sağlayan küçük bir app yazıyorum.

Mevcut prototip sadece /{app_root}/files/ içine dosyayı döker, ama tabii ki, kimse onlar sistemini kullanarak oturum açmış veya olmasa bile o alabilirsiniz. Amaç Kullanıcı oturum ve aslında dosya aittir yazılan erişimi yoksa sadece dosyaları (view access) erişimi vermektir.

Yani, kısacası, ben bunu yapmak için iyi bir yol arıyorum.

Ben /web/ (http) klasörü dışında bir klasör oluşturma ve ardından PHP header() commans kullanarak bir şekilde işlemek zorunda, ya da, belki sadece damping ya düşünüyorum veritabanına dosya? Ancak, bir ya yapmadım.

Ben sonunda bunu anlamaya şüpheli iken, birisi bu zaten yapar mevcut sınıf veya işlev kitaplığı çeşit bilecek endam olduğunu burada sadece çok akıllı insanlar var?

1 Cevap

Sen aşağıdakileri yapmanız gerekir:

  1. Webroot dışında tüm dosyaları taşıyın. Sen could. Htaccess ile klasöre erişimi devre dışı, ama güçlük ve potansiyel güvenlik riski değmez. Sadece oraya taşıyın.
  2. Orada kullanıcının orijinal dosya adını saklamak, yüklenen dosyaların bir tablo tutun. Böylece $id.$ext için dosyayı yeniden adlandırın ve. Kısacası, sizin sisteminizde kullanıcının dosya adını kullanmak istemiyorum.
  3. Bir komut dosyası var, download.php veya ne olursa olsun, dosyanın kimliği almak kaydedilir ve her şeyi kontrol eder eğer, dosyasını alıp tarayıcıya okumak ve uygun yükleme başlıkları göndermek kim doğrulayın.

Bu başlıklar gibi bir şey olurdu:

header('Content-type: application/octet-stream');
header('Content-disposition: attachment; filename=usersuppliedname.txt');
header("Content-Length: " . filesize('../safefiles/1.txt'));
header("Content-Transfer-Encoding:  binary");
readfile('../safefiles/1.txt');
exit;

Daha sonra get more fancy dosyaları ve böyle sürdürme izin vermek istiyorum, ama yukarıdaki eğer bunu yapmalıyım yapabilirsiniz.