Bazı dosyalara web erişimi nasıl engellenir?


14

Biraz garip bir operasyon yapmam lazım.

İlk olarak, Debian, apache2 ('www-data kullanıcısı olarak çalışır') üzerinde çalışırım

Yani, .txt ot .ini ile basit bir metin dosyası var, ya da herhangi bir uzantısı önemli değil.

Bu dosyalar aşağıdaki gibi bir yapıya sahip alt klasörlerde bulunur:

www.example.com/klasor1/car/foobar.txt www.example.com/klasor1/cycle/foobar.txt www.example.com/klasor1/balık/foobar.txt www.example.com/klasor1/fruit/foobar .Txt

bu nedenle, dosya adı her zaman aynıdır, 'hiyerarşi' için ditto, sadece klasörün adını değiştirin: /folder-name-static/folder-name-dinamyc/file-name-static.txt

Ne yapmalıyım (sanırım) nispeten basit: Ben sunucudaki programlar (python, örneğin php) tarafından bu dosyayı okumak gerekir, ama eğer broswer (url www kazma ile dosya içeriğini almaya çalışırsanız. example.com/folder1/car/foobar.txt veya cUrl vb. aracılığıyla) Yasak bir hata almalıyım, ya da her neyse, ancak dosyaya erişmemeliyim .

Bu dosyalara FTP yoluyla erişmenin bile 'gizli' olması veya yine de indirilememesi de hoş olurdu (en azından ftp kökü ve kullanıcı verileriyle kullanıyorum)

Nasıl yapabilirim?

Bunu çevrimiçi buldum, .htaccess dosyasına konulmalı:

<Files File.txt>
 Order allow, deny
 Deny from all
</ Files>

Çalışıyor gibi görünüyor, ancak yalnızca dosya web kökündeyse (www.example.com / dosyam.txt) ve alt klasörlerde değilse. Ayrıca, ikinci düzeydeki klasörler (www.example.com/folder1/ fruit /foobar.txt) dinamik olarak oluşturulacaktır. .Htaccess dosyasını zaman zaman değiştirmek zorunda kalmamak istiyorum.

* Www.example.com / klasör-adı-statik / * klasör-adı-dinamyc / *** dosya-adında olan, verilen ada sahip tüm dosyalar için geçerli olan bir kural oluşturmak mümkündür. -static.txt *, bu parçalar daima aynı , sadece ** bir değişiklik ?

DÜZENLE :

Dave Drager'ın dediği gibi, bu dosyayı web erişilebilir dizinin dışında tutarak bunu anlayabilirim. Ama bu dizinin diğer kullanıcılar da, resimler ve benim kullanıcılar tarafından kullanılan şeyler içerecektir, bu yüzden ben sadece, aşağıdaki gibi yinelenen bir klasör sistemi var çalışıyorum:

/var/www/vhosts/example.com/httpdocs/folder1/car/[other folders and files here]
/var/www/vhosts/example.com/httpdocs/folder1/cycle/[other folders and files here]
/var/www/vhosts/example.com/httpdocs/folder1/fish/[other folders and files here]

//and, then for the 'secrets' files:

/folder1/data/car/foobar.txt
/folder1/data/cycle/foobar.txt
/folder1/data/fish/foobar.txt

Yanıtlar:


21

Sen kullanabilirsiniz Files / FilesMatch komutlarını ve normal bir ifade:

<Files ~ "\.txt$">
    Order allow,deny
    Deny from all
</Files>

.Htpasswd bu şekilde korunur.

veya herhangi bir .txt erişimini 404'e yönlendirin:

RedirectMatch 404 \.txt$

Bu şekilde kullanmaya çalıştım, ancak alt klasörlerde dosya üzerinde
çalışmaz

Benim
regexps

tamam .. çalışabilir. Ama .. normal ifade RedirectMatch 404 \ dosyam.txt $ gibi olmalı, değil mi? Dosyalar her zaman aynı adda, ancak farklı klasörlerde olacaktır. Ve bu çözüm FTP yöntemini etkilemez, değil mi?
Strae

Doğru görünüyor ...
rkthkr

Evet, çalıştığını onaylıyorum ... ama benim regexp RedirectMatch 404 \ myfilename.txt $ yanlış olmalı .. RedirectMatch 404 \ .txt $ kullanırsam çalışır, tüm .txt dosyalarını engeller, ancak dosya adını kullanırsam değil normal ifade. Herhangi bir yardım? im regexp ile bir genuis;)
Strae

1

Evet, hepsi mümkün. Ancak sunucuda metin dosyalarına erişmesi gereken programlar varsa, bunların web kökünün dışında kalmaları gerekir. Örneğin, web dosyalarınız ~ / public_html / dizinindeyse, ~ / data dizininde saklamanız gerekir. Bunları genel html klasörüne yerleştirmek için bir neden yoktur.

Bunları web klasöründen kaldırmanın yanı sıra, unix izinlerinin üzerlerinde doğru ayarlandığından emin olun. Komut dosyalarının kullanıcısının okuma (yazma?) Erişimine sahip olması gerekir, ancak başkalarının bu erişime sahip olması gerekmez.

Bu dosyaları web'den erişilebilir bir klasörde bulundurmanız gerekiyorsa, mod_rewrite aracılığıyla istediğinizi yapmanın yolları vardır. Biri faturaya uyması gereken birçok örnek için aşağıdaki siteye bakın.

http://perishablepress.com/press/2006/01/10/stupid-htaccess-tricks/


Dosyalar python veya php ile oluşturulacak, daha sonra bir daha düzenlenmeyecek, sadece okuyacaksınız.
Strae

0

Dosyaya erişimi reddetmek için neden standart unix dosya izinlerini kullanmıyorsunuz?

Vikipedi'de unix dosya izinleri hakkında iyi bir açıklama var


Php, python, root kullanıcısının bu dosyaları işlemesine izin vermek için nasıl izin verebilirim?
Strae

0

.Htaccess dosyasını alt dizine ve deyime koyun, AllowOverride All öğesini ayarlayın


Yani her 2 ° düzeyindeki klasöre bir .htaccess ihtiyacım olacak mı? mmh .. bir çözüm olabilir .. 1 .htacces ile daha iyi olurdu ..
Strae


0

Hepinizi okuduktan sonra, .htaccess dosyasının benim için bir yol olabileceğini fark ettim: sadece bulunduğu klasördeki dosyaları etkiler.

Ancak klasörlerim dinamik olarak oluşturuldu. Yeni bir klasör oluşturduğumda .htaccess dosyasını kopyalamanın veya yeniden oluşturmanın güvenilir bir yol olduğunu düşünmüyorum.

Dave'in dediği gibi, mantıksal yol, yapılandırma metin dosyalarını web'den erişilebilen klasörün dışında saklamak olmalıdır.

Ama her klasörde diğer dosyaların, örneklerin, web erişimi olması gereken görüntüleri saklamak zorundayım ... ve hala klasör yapısını çoğaltmanın, web kök dizininde ve dışında kopyalamanın da güvenilir bir yol olduğunu düşünmüyorum. . Bu nedenle, php izin verilen yolda yapılandırma klasörünü dahil etmek için apache yapılandırmasını bile değiştirmem gerekecek .. Bu zaten bir sorun olmamalı.

Ben daha dont Yani, daha iyi , ben seçtim zorunda az kötü bir.

Şimdilik, gelecekte pişman olmamayı umarak birden çok .htaccess dosyası çözümünü kullanacağım.

Diğer her çözüm takdir edilmektedir.


0

Gönderen Sipariş dokümantasyon bölümünde:

Anahtar kelimeler yalnızca virgülle ayrılabilir; aralarında boşluk kalmasına izin verilmez.

Bu yüzden aşağıdakiler yanlış:

<Files File.txt>
Order allow, deny
Deny from all
</ Files>

Aşağıdaki (daha) doğru

<Files "File.txt">
Order allow,deny
Deny from all
</Files>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.