Bagaimana cara menolak akses web ke beberapa file?

13

Saya perlu melakukan operasi yang agak aneh.

Pertama, saya menjalankan di Debian, apache2 (yang 'berjalan' sebagai data pengguna www)

Jadi, saya punya file teks sederhana dengan .txt ot .ini, atau ekstensi apa pun, tidak masalah.

File-file ini terletak di subfolder dengan struktur seperti ini:

www.example.com/folder1/car/foobar.txt www.example.com/folder1/cycle/foobar.txt www.example.com/folder1/fish/foobar.txt www.example.com/folder1/fruit/foobar .txt

oleh karena itu, nama file selalu sama, juga untuk 'hierarki', cukup ganti nama folder: /folder-name-static/folder-name-dinamyc/file-name-static.txt

Yang harus saya lakukan adalah (saya pikir) relatif sederhana: Saya harus dapat membaca file itu dengan program di server (python, php misalnya), tetapi jika saya mencoba untuk mengambil konten file dengan broswer (menggali url www. example.com/folder1/car/foobar.txt, atau via cUrl, dll.) Saya harus mendapatkan kesalahan terlarang, atau apa pun, tetapi tidak mengakses file .

Akan lebih baik bahwa bahkan mengakses file-file itu melalui FTP adalah 'tersembunyi', atau lagi pula tidak dapat diunduh (setidaknya yang saya gunakan dengan ftp root dan data pengguna)

Bagaimana saya bisa melakukannya?

Saya menemukan ini online, dimasukkan ke dalam file .htaccess:

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

Tampaknya berfungsi, tetapi hanya jika file ada di root web (www.example.com / myfile.txt), dan tidak dalam subfolder. Selain itu, folder di tingkat kedua (www.example.com/folder1/ fruit /foobar.txt) akan dibuat secara dinamis .. Saya ingin menghindari keharusan mengubah file .htaccess dari waktu ke waktu.

Dimungkinkan untuk membuat aturan, sesuatu seperti itu, yang berlaku untuk semua file dengan nama yang diberikan, yang ada di * www.example.com / folder-name-static / * folder-name-dinamyc / *** file-name -static.txt *, di mana bagian-bagian itu selalu sama , hanya ** yang satu perubahan ?

EDIT :

Seperti yang dikatakan Dave Drager, saya bisa mengamplifikasi ini dengan menyimpan file-file itu di luar direktori yang dapat diakses web. Tetapi direktori tersebut akan berisi file orang lain juga, gambar, dan hal-hal yang digunakan oleh pengguna saya, jadi saya hanya mencoba untuk tidak memiliki sistem folder duplikat, seperti:

/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
Strae
sumber

Jawaban:

20

Anda bisa menggunakan Files / FilesMatch dan ekspresi reguler:

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

Ini adalah bagaimana .htpasswd dilindungi.

atau mengalihkan akses .txt ke 404:

RedirectMatch 404 \.txt$
rkthkr
sumber
Aku tryed untuk menggunakan cara itu, tapi tampaknya yang dont bekerja pada file dalam sub-folder
Strae
Aku tetap regexps saya, maaf ...
rkthkr
ok .. bisa bekerja. Tapi .. regexp harus seperti RedirectMatch 404 \ myfilename.txt $, kan? File-file akan selalu nama yang sama, tetapi dalam folder yang berbeda. Dan solusi ini tidak akan memengaruhi metode FTP, bukan?
Strae
Itu terlihat benar ...
rkthkr
Ya, saya konfirmasikan itu berfungsi ... tetapi regexp saya RedirectMatch 404 \ myfilename.txt $ pasti salah .. berfungsi jika saya menggunakan RedirectMatch 404 \ .txt $, memblokir semua file .txt, tetapi tidak jika saya menggunakan nama file di regexp. Ada bantuan? im bukan genuis dengan regexp;)
Strae
1

Ya, ini semua mungkin. Namun, jika Anda memiliki program di server yang perlu mengakses file teks, mereka harus berada di luar root web. Sebagai contoh, jika file web Anda di ~ / public_html /, Anda harus menyimpannya di ~ / data. Tidak ada alasan untuk menempatkan mereka di folder html publik.

Selain menghapusnya dari folder web, pastikan izin unix diatur dengan benar. Pengguna skrip harus memiliki akses baca (tulis?) Tetapi orang lain tidak harus memiliki akses ini.

Jika Anda DO perlu memiliki file-file ini di folder yang dapat diakses web, ada beberapa cara untuk melakukan apa yang Anda minta melalui mod_rewrite. Lihat situs follow untuk banyak contoh, salah satunya harus sesuai dengan tagihan.

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

Dave Drager
sumber
File akan dibuat melalui python atau php, lalu, jangan pernah diedit lagi, baca saja.
Strae
0

Mengapa tidak menggunakan izin file unix standar untuk menolak akses ke file?

Ada penjelasan yang layak di wikipedia tentang izin file unix

cyberkni
sumber
Bagaimana saya bisa mengatur izin untuk membiarkan php, python, pengguna root menangani file-file itu dan akses browser tidak?
Strae
0

Letakkan file .htaccess di subdirektori dan dalam pernyataan, atur AllowOverride All

Matt Simmons
sumber
Jadi saya akan membutuhkan .htaccess untuk setiap folder level 2 °? mmh .. dapat menjadi solusi .. akan lebih baik dengan 1 .htacces ..
Strae
0

Anda dapat menggunakan Linux ACL .

Alakdae
sumber
Apakah itu izin file sederhana? seperti rwx? Bagaimana saya bisa melakukan apa yang saya butuhkan dengan ini?
Strae
0

Setelah membaca Anda semua, saya perhatikan bahwa file .htaccess dapat menjadi jalan bagi saya: hanya memengaruhi file-file di folder di mana ia berada.

Tapi folder saya dibuat secara dinamis. Saya tidak berpikir bahwa menyalin file .htaccess atau membuatnya kembali setiap kali saya membuat folder baru adalah cara yang dapat diandalkan.

Seperti yang Dave katakan, cara logis harus menyimpan file teks konfigurasi di luar folder yang dapat diakses web.

Tetapi di setiap folder saya harus menyimpan file lain, gambar untuk contoh, yang harus dapat diakses web ... dan saya masih tidak berpikir bahwa mereplikasi struktur folder, masuk dan keluar web-root direktori, adalah cara yang dapat diandalkan juga . Oleh karena itu, saya perlu mengubah bahkan konfigurasi apache untuk memasukkan folder config di jalur yang diizinkan php .. toh ini seharusnya tidak menjadi masalah.

Jadi, jika saya tidak memiliki yang lebih baik , saya harus memilih yang kurang buruk .

Saya akan menggunakan beberapa solusi file .htaccess, untuk saat ini, berharap tidak memiliki penyesalan di masa depan.

Setiap solusi lainnya dihargai.

Strae
sumber
0

Dari bagian dokumentasi Pemesanan :

Kata kunci hanya dapat dipisahkan oleh koma; tidak ada spasi putih di antara mereka.

Jadi yang berikut ini salah:

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

Berikut ini (lebih) benar

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