Rasgele oluşturulan güvenli dosya adları kesinlikle iyi bir şey vardır. Ancak yine uzantısı gibi sunucu üzerinde herhangi bir sorun neden olmaz bir şey olduğundan emin olmak gerekir webroot aracılığıyla dosya uzantısını sağlayan ise .php
(Tamam, PHP işleme olmalı yükleme dizinleri için web sunucusu devre dışı, ama yine de). Eğer noktalar ve sondaki boşlukları dosya sistemi karıştırmayın bir Windows sunucu üzerinde iseniz sorunları da vardır; Eğer birkaç 'bilinen iyi değerlerine uzantısı kilitlemek emin olun.
Ne yazık ki ['type']
özellik tüm dayanıyordu olamaz. Bazı tarayıcılar kendi işletim sistemleri, bazı iradesini, (bir infamously yararsızdır bir varsayılan Windows üzerinde IE image/pjpeg
JPEG çağırır yani) kötü kurmak çünkü başkalarının yanlış türünü koyacağız, bir içerik türü doldurmak değil, Her zaman application/octet-stream
hatta text/plain
söylüyorlar.
Hatta ['name']
mülkiyet güvenilmez; ayrı bir değer ya da yalan obfuscating tarayıcılardan gelen, belirli bir tür söz konusu makinenin beklenmedik bir dosya uzantısı olacak şans her zaman var. Ya da, Mac ve Linux istemcileri için, bir yüklenen dosya hiç bir uzantıya sahip olmayacak (hatta işletim sistemi olarak görüyor türü için yanlış uzantısı olabilir) tamamen mümkündür.
Yani evet, bu bir karmaşa tüm bir parçasıdır. Content-Type sunulması veya dosya adı türü için koklama ederken uzantısı bir dosya ne olması gerektiği varsayılan tür tahmin etmek için yararlı olabilir, bu tamamen güvenilmez, bu yüzden ek bir dosya türünü seçmek için manuel bir yöntem sağlamak için iyi bir şey. Eğer ek olarak yüklenen dosyaları hizmet vermekteyiz Alternatif olarak, (ayar bir PHP komut dosyası aracılığıyla örneğin Content-Disposition: attachment
), genellikle sadece her şeyi application/octet-stream
çağıran ve bu tür kullanıcı izin kurtulabiliriz dışarı onlar zaman kaydetmek.
Bir eklenti olarak hizmet değilseniz, bir güvenlik sorunu olabilir. IE mutlu size <html>
etiketleri için hizmet ve onlar başka bir şey olduğunu söylemek bile HTML gibi bu dosyaları tedavi birçok dosya türlerini koklayacaktır. Sonra tarayıcıda satır içi onları görüntülemek ve onları güvenlik bağlamında komut dosyası eklemesine olanak olabilir. Eğer kullanıcı hesapları ve kurabiye gibi güvenlik bağlamında önemli bir şey varsa, bu çapraz site betik güvenlik delik. (Tipik olarak, bir alt etki alanı kullanılır) Bunun için geçici çözümler eki ve / veya ana sitenin güvenlik bağlamında değil farklı bir hostname hizmet olarak hizmet vermekteyiz.
Tamamen ortaya çıkıyor sunucuya dosya yüklemek için güvenmediğiniz kullanıcıların aslında PHP öğreticiler önemsiz örnek kod çok daha zor bir görev olarak izin inanmak size yol açacak. :-(