Benim kendi HTMLs yoluyla dışında web sitemdeki görüntülere erişimi kısıtlamak

5 Cevap php

On my website I store user pictures in a simple manner such as: "image/user_1.jpg".

Ben ziyvardırtçiler sadece user_ids deneyerek benim sunucuda görüntüleri görmek mümkün istemiyorum. (Ör: www.mydomain.com/images/user_2.jpg, www.mydomain.com/images/user_3.jpg, vb ...)

Şimdiye kadar aklımda üç çözümleri var:

  1. Ben "görüntüleri" klasörünü parola ile korumak için. Htaccess kullanarak denedim. Bu noktada bana yardım etti ama görüntülerin bazıları benim HTMLs üzerinde bir kullanıcı adı ve şifre isteği popping başladı (inanılmaz bazı görüntüleri vermedi iken) bu yüzden bu öngörülemeyen bir yöntem olarak görünmektedir.

  2. Ben biraz tuz ile bir md5 hash benim User_id bulunuyor dönüştürmeye başlayabilirsiniz. / Image/user_e4d909c290d0fb1ca068ffaddf22cbd0.jpg: görüntüler olarak adlveırılan olacaktır. Ben bu çözüm sevmiyorum. Bu dosya sistemi yolu karmaşık hale getirir.

  3. ya da ben kullanıcı PHP'nin readfile () işlevi ya da belki Perl veya Python benzer bir şey olabilir. Örneğin ben o görüntüye erişmelerini LoggedIn olarak ziyvardırtçilerimize doğrulamak için bir md5 dize kullanarak şifre geçebileceği.

(Onlar PHP daha hızlı olacağını varsayarak) seçeneği 3 doğru ama Perl veya Python açı ile eğilerek ediyorum. Ancak ben bu konuda başka fikirleri görmek istiyorum. Belki bu basit bir. Htaccess hile var mı?

Temelde ben emin olmak istediğiniz tüm görüntüleri doğrudan sitemde barındırılan HTMLs içinde denir sürece hiç kimse benim web sitesinden görüntüleyebilirsiniz olmasıdır.

Çok teşekkürler,

Haluk

5 Cevap

Yöntem # 1 istendiği her görüntü üzerinde kullanıcı adı ve şifre soracaktır olarak geçerli değildir. Muhtemelen önbelleğe alma sorunları nedeniyle başkaları için görüntülerin değil, bazıları için istemi var.

Yöntem # 2 yoğun az işlemci olmanın bana en cazip görünüyor, ancak User_id md5 fonksiyonundan geçirilerek ile dosya adı hala oldukça kolay tahmin edilebilir. Sen daha iyi bir çözüm için ('benim gizli dize'. $ User_id) md5 için gitmek gerekir.

Neden Perl veya Python ile 3. uğraşıyorsun? Ne PHP'nin hız nesi var? Eğer görüntüleri bu şekilde koruyorlar eğer gerçekten bunları dışarı hareketli ekstra uzunluğu gitmeli ve kullanıcı kimlik doğrulaması ise webroot yukarıdaki yüzden betiğin ilk kontrolleri yoluyla erişilebilir konum ve sonra onu okuyarak avatar geçer ve çıkış. Alternatif olarak, diyen bir htaccess dosyası ile dizin korumak deny from all. Olabilir

Artı PHP yoluyla veya via .htaccess ya bir HTTP_REFERER güvenlik için gitmek gerekir.

İyi şanslar!

Eğer bir isteğin kaynağını belirlemek için seçtiğiniz herhangi bir yöntem çok değil, kullanıcının tarayıcısı tarafından gönderilen HTTP_REFERER bilgi kadar güvenilirdir. Kimlik doğrulaması gerektiren içeriği korumak için sadece iyi yoldur.

Sen doğru seçenek 3. düşünüyor. Kullanıcı ve readfile () bir görüntü doğrulamak olacağını servisi komut dosyasını kullanın. Öncesinde bir görüntü hizmet için header () fonksiyonu aracılığıyla doğru Content-Type HTTP başlığı ayarlamak için emin olun. Daha iyi izolasyon görüntüleri web kök dizini üzerinde koymak, ya da iyi yazılmış htaccess kuralları tarafından korunmalıdır için -. Bu şekilde dosya ve / veya dizinleri korumanın bir yolu kesinlikle yoktur.

Htaccess üzerinden "Hotlinking önleme" aramak ve ben size ihtiyacınız koruma türü için basit bir çözüm olması gerektiğini düşünüyorum. Ancak onun aptal kanıt değildir, gerçekten bu görüntüleri almak isteyecek insanlar yönlendirme taklit tarafından bir iş etrafında bulacaksınız.

http://altlab.com/htaccess%5Ftutorial.html

Söylendiği gibi koruma hotlinking sadece kendi id değiştirerek listeleme dosyalarınızı korumak değildir. Artı refferer kolayca taklit edilebilir.

Bu durumda ben kimlik çeşit öneriyoruz. Bunu çerez veya oturum üzerinden oturum açan kullanıcıyı doğrulamak sadece görüntüleri hizmet edecek PHP komut dosyası oluşturmanız gerekir. (I kullanıcı şifre md5 kullanarak tavsiye etmem).

Belki erişim izinlerini kurtarmak için bazı SQL tablosu gerekir.

Oh ve resimlerinizi korumak için sadece yerleştirebilirsiniz. Htaccess ile

deny from all

görüntüler klasörüne.