Bu kod yaklaşımda güvenlik kusur

6 Cevap php

Bu yaklaşımda herhangi bir güvenlik kusur olacağını merak ediyorum. Ben kullanıcıların dosyaları ve bu dosyaları indirmek için başka bir set yüklemek için izin kodu bir parça yazıyorum. Bu dosyalar herhangi bir şey olabilir.

  1. Kullanıcı dosyayı (. Php dosyalar dahil herhangi bir dosya) yükler, bir md5 hash (uzatma kaldırıldı) olarak isimlendirilecek ve sunucu üzerinde saklanır. Bir karşılık mySQL giriş yapılır.
  2. Dosyayı indirmek için çalışıyor kullanıcı, md5 dosyası (orijinal adı ile) gönderilen dosya indirmek için download.php söylüyorlar kullanır.

Herkes Yukarıdaki senaryo istismar hangi someway var mı?

6 Cevap

Peki, teoride hayır. Bu sistemi istismar yolu olmamalıdır. Ancak, ben seni düşündüm olmayabilir size işaret etmek istiyorum birkaç şey vardır.

Dosyaları (uygun başlıkları ile readfile() varsayarak) bir PHP dosyası üzerinden indirilen beri Birincisi, kullanıcılara ulaşılmaz bir yerde dosyaları yerleştirmek gerekir. Apache sunucularda, genellikle kolay yaklaşım sadece harici erişimi engellemek için ona "bütün inkar" ile yükleme dizine bir. Htaccess dosyasını koymaktır. Kullanıcıların ilk etapta harici dosyalara erişimi yoksa, o zaman (gerçi, depolama amaçlı yeniden adlandırma hala iyi bir fikirdir) gerçekten sorun neden dosya uzantıları hakkında herhangi bir endişe yok

Eğer sonunda çarpışmaları alabilirsiniz beri İkincisi, karma tarafından dosyaları adlandırma, böyle parlak bir fikir olmayabilir. Ne iki dosya aynı karma sahip olur? (Adını dosya içeriği hesaplanmış ve değilse) söz değil, karma bilgisayar yavaş tarafında biraz özellikle büyük dosyalar için vardır. Eğer veritabanına girişi saklamak beri, ben size (bir auto_increment alanı gibi) orada birincil anahtar çeşit varsayılabilir. Ben sadece çarpışmalarını önlemek için depolama için dosya adı olarak bu kimlik numarasını kullanarak öneriyoruz (alabilirsiniz, bilmiyorum durumda mysql_last_insert_id() aracılığıyla son eki tarafından oluşturulan ID)

Tabii ki, her zaman dosya indirirken makineyi bulaşabilir virüsler içeren dosyaları ile ilgili sorunlar olabilir, ama bu sorunun kapsamı dışında gerçekten ve herhangi bir şekilde sunucu kendisini etkilemez.

Eğer onlar çünkü ayrı bir delik and karma öngörülebilir değildir include / require yerel dosyalar, o zaman evet.

Yani, temelde, hayır. :-)

Sürece kimse sunucu üzerinde bu dosyaları çalıştırmak gibi oldukça güvenli görünüyor.

Beklendiği gibi yükleme çalışması için için muhtemelen MIME türünü depolamak ve Content-Disposition başlığında uygun bir uzantısı olan bir dosya oluşturmak gerekiyor. Hangi ayrıca bu siteleri PHP ile aracılık (böylece open_base_dir dışında onları koyamazsınız) gerektiği anlamına gelir.

Sen yüklenen dosyalar dahil olabilecek herhangi bir yolu olup olmadığını görmek için kodunuzu gözden geçirmelidir.

C.

Bu varsayılan çalıştırılabilir hale ve buna rastgele bir karma var, işletilebilir olacak değil garanti edilmez farklı uzantısı ise. Sadece uzantısı PHP atama yok emin olun.

Ben olmayan bir yürütülebilir birine dosya uzantılarını yeniden adlandırmak öneririm ki orada güvenlik içinde bir kaçamak ve bazı biri bunu yürütmek mümkün olmayacaktır dosyaya erişmek mümkün olsa bile. Bunun dışında bazı biri güvenliği tehlikeye nasıl bir yol göremiyorum.