dosya yükleme güvenlik, htaccess ve değişen uzantıları

2 Cevap php

hepsi. Ben web geliştirme için oldukça yeni, bu yüzden lütfen nazik olun. Zaten tartışılan olmuş bir konuyu ilanıyla eğer özür dilemek; Ben arandı ama ben başka bir iş parçacığı aradığı oldukça ne bulamadı.

Arka plan: Ben dosya yüklemelerini sağlayan bir site var, ama tarih bir kez, onlar da herkes ama bana göre görülebilmesini gerekmez. Böyle, php yükleme komut sadece belirli uzantılara izin vermek zorunda 0644 yüklenen dosyaları chmoding, ve yüklemeler klasörün içindeki bir htaccess dosyasında çeşitli uzantıları için-ExecCGI kullanarak gibi bazı güvenlik önlemleri uyguladık.

Sorular (üç tanesi, siz şanslı değil):

1) benim htaccess dosyası başka bir şey olarak php uzantıları yeniden var istiyorum. Ben kod biraz bunu buldum, ama çalışmak için almak gibi olamaz:

RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^PUT$ [OR]
RewriteCond %{REQUEST_METHOD} ^MOVE$
RewriteRule ^(.*)\.php /site_redone/uploads/$1.nophp

the site structure goes like this (at least for now while I'm redoing the site): mysite.com/site_redone/uploads

Benim paylaşılan sunucunun konak mod_rewrite izin verdiğini biliyoruz. Onlar php 5.2.10 koşuyoruz. Emin değil benim sorunum bir yol sorunu (ben oldukça henüz o kısmını kavramış değil), ama boşuna RewriteRule kısmen çeşitli yol permütasyon denedim eğer.

2) Şu anda, örneğin, dosyam.doc myfile1252087685.doc olur böylece, aynı isimde bir dosya tarafından üzerine yazılmasını önlemek için zaman damgası bir tür (time ()) ile eklenmiş olan dosya isimleri var. Ben bir MySQL veritabanında uzantısı saklamak ve sadece. Txt veya benim php yükleme komut şey sona dosya adını yeniden, ama bu yukarıda mod_rewrite girişimi olarak aynı şeyi başarmak olacak emin değilim olabilir.

3) Bu yüklenenler klasöründe iken benim bazı ne'erdowell üzerine alamayan çok yüklenenler klasöründen daha yüksek bir dizinde htaccess dosyasını koymak için bir yolu var mı? Ben sadece yüklenenler klasörünü değil, olsa, yerleştirilen hangi dizin etkiler istiyorum. Ben bu şekilde Directory kullanmayı gerektirir tahmin ediyorum, ama ben bunu nasıl bilmiyorum. Ben bu işte yeniyim bahsetti mi?

Şimdiden teşekkürler!

2 Cevap

Ben RewriteRule regex bütün yolu değil. Htaccess dosyasının konumuna bir akrabası karşı maçları düşünüyorum. O düşünceden konusunda emin değil.

Yani bu gibi bir regex denemek isteyebilirsiniz:

^.*/([^/]*).php$

Ya da belki:

^/site_redone/uploads/([^/]*)\.php$

Ben daha önce bir alt dizininde bir mod_rewrite RewriteRule koymak hiç, bu yüzden yukarıda en üst düzeyde için önerilmektedir. Htaccess

I <Directory>. Htaccess izin sanmıyorum, ama çalışan bazı diğer benzer yönergesi var. (FilesMatch falan mı?)

Bekle ... Eğer tüm klasör web erişimini engellemek istediğiniz söylemedin? Eğer http hata kodu engellendi erişimi olan bir hata sayfasını görüntüler bir php script /site_redone/uploads/ ile başlar yeniden yazma anythything mod olabilir. Yani bu gibi bir ifade: ^/site_redone/uploads/.*$

Peki, ne yapmam çalışıyordum, aslında bunu yapmak için çalışıyordu en azından bir yol mümkün değil gibi görünüyor. Ben bir html formu aracılığıyla dosya yüklemeleri kullanıyorum çünkü, yukarıda yazma kuralı dosya adına hareket etmek mümkün olmayacaktır beni bilgilendirdi modrewrite.com forumunda biraz yardım aldım. Yukarıdaki pasajı bu kod için olabilir, ve ben, alıntı "WebDAV veya daha fazla FTP gibi olan benzer." Ben istenmeyen ot php ile sopa gerekir. Her neyse, o birisi yardımcı olur umarım!