PHP seviyesinde dosyaları korumak için performans odaklı bir yol?

7 Cevap php

Ben uzun zamandır düşünüyordum şey bazı giriş için arıyorum. Belki ben henüz düşünce değil orada çözümleri vardır, çok genel bir sorundur.

I have a PHP-based CMS.
For each page created in the CMS, the user can upload assets (Files to download, Images, etc.)

Bu varlıklar bir dizinde saklanır, en bir sayfa başına temelinde "/ myproject / Varlıklar", (1 alt = 1 sayfa, örneğin "/ myproject/assets/page19283") diyelim

Kullanıcı CMS (sakla) sayfaları "un-yayımlamak" olabilir. Bir sayfa gizli, ve birileri bu URL'yi ezberlemiş ya da Google veya bir şey geldiği için onu erişmeye çalıştığında zaman, onlar bir "bulunamadı" mesajı alıyorum.

Ancak, varlıkları hala mevcuttur. Kullanıcı bir sayfayı un-yayınlamaktadır zaman, onlar tamamen gitti güven böylece ben de bu korumak istiyorum. (Içeriği aşağı çekmek için mahkeme emirleri gibi adli sorunlarım Çok önemli ... Bunun gibi şeyler olabilir).

En belirgin yolu to store all assets in a secure directory (= web sunucusu tarafından erişilebilir değil), ve kontrol ettikten sonra dosyaları geçer bir PHP "ön kapı" kullanmaktır. Bir proje su geçirmez gerektiğinde bu şu anda gitmek yoludur, ancak PHP yorumlayıcı sitede her küçük resim, senaryo, ve biçembentle çalışır çünkü ben bunu sevmiyorum. Ben daha hızlı bir yol var istiyorum.

CMS taşınabilir ve paylaşılan bir ortamda çalıştırmak mümkün olması gerekiyordu çünkü .htaccess koruma (tüm veya benzer Deny) mükemmel değildir. Ben bile IIS ve diğer web sunucuları üzerinde çalıştırmak istiyorum.

Ben şimdi düşünüyorum en iyi yolu, bu un-yayınlanan olduğunda güvenli bir yere moving belirli sayfanın varlık dizin olduğunu ve yayınlanan olduğunda geri hareket ettirin. Ancak, yönetici kullanıcı bu un-yayınlanmış bile zaman sayfasını görmek mümkün olması gerekir, bu yüzden ben güvenli dizinden bu varlıkları hizmet için var olduğu gerçeği etrafında çalışmak zorunda olacaktır.

Herkes (= hayır bir PHP komut dosyası geçen) ama yine PHP kullanarak erişimi kontrol dosyalara doğrudan Apache erişim sağlayan bir yol düşünebiliyor musunuz? Yapamam.

Ben de most paylaşılan ortamlarda çalıştırmak için muhtemeldir basit. Htaccess çözüm düşünün.

7 Cevap

EDIT: nasıl yönetimsel arayüzü için bir hibrid hakkında? ACP, size, temelde, PHP authing dosyasına tüm dosya istekleri göndermek için PHP yöntemi ile erişebilir, ama halk için, size sonucun kullanılabilirliğini belirlemek için HTTP AUTH / htaccess kullanabilirsiniz. Bu size kamu tarafında performansı, ancak ACP tarafında koruma sağlar.

ESKİ MESAJ:

. Htaccess en Apache ve IIS ile uyumlu <(çeşitli ISAPI modülü kullanılarak) 7 ortamlar mod_rewrite tip işlemleri kullanarak. Tek istisna IIS7 + web.config dosyasını kullanan yeni Rewrite modülü. ANCAK, ben verimli bir yerine. Htaccess kullanarak bu örneği için web.config dosyasını değiştirmek / oluşturmak verebilecek olmak için istekli olurdu.

O, (umarım doğru 404 başlığı gönderir) yeniden yazma yöntemini kullanarak yönlendirmeleri kurmak ve geleneklere 404 Sayfa yönlendirme olabilir göz önüne alındığında. Gerçek varlık, bir 403 başlık veren biri olmalı, çünkü% 100 uygun değil, ama ... çalışıyor.

Bu doğru her sunucu platformu için HTTP AUTH kurulumları oluşturmak istediğiniz sürece ben giderdim yoldur. Eğer doğru yaparsanız Artı, sen (onlar bunu yapmak istedim eğer bir php tabanlı seçeneği dahil) sizin veya kullanıcılar tarafından gelecekte diğer türlerine izin vermek için sistem uzatılabilir yapabilir.

Eğer önerilen gibi hassas bir şey, güvenli bir alanda muhafaza edilmelidir.

Web sitenizin / var / www / public_html yer ise

You put the assets outside the web accessible area in /var/www/assets PHP can call for a download or you can feed the files through PHP depending on your need.

Eğer CMS DB HTML tuttu, o hassas olmayan görüntüler ve sadece bırakacaktı CSS.

Kesinlikle ve tüm malzemeler için tüm erişim kapatmak için varsa, ben senin en iyi bahis sembolik bağ olabileceğini düşünüyorum. Web alanı içine varlıkların her klasörü olmayan bir web erişilebilir bir alanda-her şeyi-tutun ve sym bağlantı. Bu şekilde, tamamen insanları kilitlemek için gerekiyorsa, sadece yerine tüm dosyaları kaldırarak daha sembolik bağ çıkarın.

Ben onu sevmiyorum, ama ben senin crtieria uyan düşünebilirsiniz tek şeydir.

Ben sadece hotlinking olmayan herhangi bir HTML dosyasının önlemek istiyorum, böylece tüm "varlıklar" şeyler sadece HTML sayfasından erişilebilir. Çıkarılması (ya da koruyucu) sayfa sadece pisliği tüm dosya sistemi gerek kalmadan her şeyi kaldırır.

Ben 'sayfa' PHP tarafından oluşturulan ediliyor ve 'varlık' PHP gerektirmemelidir varsayarak yaşıyorum. (Ben bu yanlış var ise bana bildirin.)

Sen varlıkları klasörünü yeniden adlandırabilirsiniz. Örneğin, '/ myproject/assets/page19283-hidden' için '/ myproject/assets/page19283' yeniden adlandırın. Bu tüm eski, hafızaya bağlantıları kıracak. Bunu görebilirsiniz yönetici kullanıcılar için sayfa oluşturmak zaman, sadece yeni klasör adını kullanarak adresler yazmak. Tüm bunlardan sonra, sayfa 'gizli' olup olmadığını biliyorum. Eğer 'gizli' url biliyorsanız varlıklar doğrudan ulaşılabilir.

Ek güvenlik için, rasgele metin bir grup ile klasörü yeniden adlandırmak ve (gizli bayrağı saklamak yerde) sayfanızda tablo olduğunu saklamak: '/ myproject/assets/page19283-78dbf76B & 76daz1920bfisd6g ve dsag'. Bu gizli url tahmin çok daha zor hale getirecektir.

Sadece Önlerine veya veritabanında sayfa adı ve dosya sistemindeki kaynak dizine bir GUID ekleyin. Admin hala bağlantı güncellenmiş olacak ama GUID etkin bir dış kullanıcı veya arama motoru tarafından sayfa keşfedilmesi yapar çünkü yönetici arayüzü görüntülemek mümkün olacak.

Ben bir ağ geçidi uygulanması ile gitmek istiyorum. Bir. Htaccess dosyası hem kimlik bilgileri geçerli değildir ve bu özel dosya yayınlanmış ya da göstermek değilse inkar edecek bir gateway.php komut işaret / varlık / URL ayarlayın.

Biraz kafam karıştı. Ayrıca stil dosyaları ve görüntüleri korumak gerekir mi? Belki de bu klasörü hareketli iyi alternatiftir.

Web kök (: public_html veya htdocs dışında bir dizin yani) dışında bir dizine bilgilerinizi saklayın. Istendiğinde sonra, proxy dosyalarını bir php komut dosyası readfile operatörü dışında kullanmak. bir dosyaya yolunu - - readfile (...) temelde tek bir parametre alır ve bu dosyanın içeriğini yazdırır.

Bu şekilde, onlar URL "ezberlenmiş" bile, 404 veya 403 ile onları açabilirsiniz, bir ziyaretçi proxy arkasında gizlenen bilgi isterse bir bariyer oluşturabilirsiniz.