FreeBSD 7'nin libc uygulanması _gettemp aşağı ilgili kodu kovalayan sonra, dosyanın içeriğini tmp_name
geçersiz olabileceğini nasıl ilgili şüphelerim var. (Onu izlemek için, PHP 5.2.8 bir kopyasını indirmek olabilir ve main/rfc1867.c
okumak - satır 1018 çağrıları main/php_open_temporary_file.c
, işlev hattında 227 başlayan, o ana bir iş yapar, hangi Ancak, {[(0)] kullanır FreeBSD libc implementation hat 66 üzerinde (bağlantılı) bulunan sisteminizde, esasen mkstemp için sadece bir sarıcı hat 97, başlayan işlevinde } (yukarıdaki ile aynı) aslında rastgele dosya oluşturmak için. Ancak the manpage for mkstemp BÖCEK bölümünde bahseder arc4random()
function is not reentrant. It might bir olasılık olması 2 eşzamanlı istekleri Kritik kod bölümüne giren ve aynı tmp_name
dönüyor - Ben FastCGI / php-cgi kullanarak işe yarayabilecek olsa (Apache orada Yorumlamak için mod_php veya php-cgi biriyle nasıl çalıştığı hakkında çok az şey biliyoruz - I can ' t) Bu zamanda bu başarıyla yorum.
Oldukça dosyayı karşılaşmayan Ancak, simpliest çözüm amaçlayan tmp_name
kendisi geçersiz olması, ancak tek kaynağı olarak tmp_name dosya adı kısmını kullanarak eğer, örneğin, (diğer yüklenen dosyalar ile yerine çarpışarak depolanan dosya) teklik, nedeniyle birthday paradox için çarpışmalar karşı karşıya olabilir. In another question taşımak için bazı 5.000.000 dosyaları olan söz, ve still another question Eğer recieving söz 30-40k bir gün yükler. Bu bir doğum günü paradoks çarpışma için önemli bir durum olarak beni vurur. mktemp man page 56800235584 olası dosya adları vardır (PHP yaptığı gibi altı 'Xs' kullanıyorsanız) bahseder (62 ** 6, ya da 62 ** n nerede 'Xs' n = sayı, vb.) Ancak, bazı 5 milyon dosya daha var ki verilen, bir çarpışma olasılığı approximately 100% (başka sezgisel zaten, zaten 220 çarpışmaların bazılarının sırasını yaşamış olacak göstermektedir olan ((dosyaları (* dosyaları eğer -1)) / 2) / (62 ** 6) şey demektir, burada dosyalar = 5,000,000). Bu (olası, if oluşturulan yüklenen dosya için daha fazla entropi eklenirken değil) karşı karşıya sorun varsa, sizin gibi move_uploaded_file($file['tmp_name'], UPLOADS.sha1(mt_rand().$file['tmp_name']).strrchr($file['name'], '.'))
şey deneyebilirsiniz - daha fazla rastgelelik eklemek olma fikri rasgele dosya adı, çarpışmaları önleyerek. Alternatif main/php_open_temporary_file.c
ve 134 hat ve yeniden derlemek için iki daha 'Xs' eklemek olabilir.