Tolak akses ke satu folder tertentu di .htaccess

131

Saya mencoba untuk menolak pengguna mengakses site/includesfolder dengan memanipulasi URL.

Saya tidak tahu apakah saya harus menolak semuanya dan secara manual membuat pengecualian individu untuk memperbolehkan, jika saya bisa menolak folder yang satu ini, atau jika ada fungsi menulis ulang yang dapat digunakan.

Contoh spesifik: Saya tidak ingin melihat file direktori dengan mengetikkan localhost/site/includeske URL.

snoob dogg
sumber
1
hanya untuk melarang daftar direktori tulis Options -Indexesdalam file .htaccess yang terletak di folder root

Jawaban:

206

Buat site/includes/.htaccessfile dan tambahkan baris ini:

Deny from all
anubhava
sumber
5
Hei!! anubhava Saya telah menggunakan ini untuk menonaktifkan akses langsung ke file api saya di dalam folder / api tapi sekarang semua panggilan layanan web mengirim 403 status terlarang .. Saya hanya ingin memblokir akses ketika seseorang mengaksesnya dari browser.
ravisoni
9
Untuk server web tidak ada perbedaan nyata antara permintaan antara browser dan non-browser.
anubhava
Saya menggunakan nginx dan saya tidak bisa menggunakan .htaccess. jadi, bagaimana saya bisa melakukannya tanpa .htaccess? terima kasih
Shafizadeh
Bagaimana saya bisa mengakses file folder / sub folder jika saya tolak dari semua? File-file ke dalam folder / sub folder memberikan 404 kesalahan.
Vikas Khunteta
2
Deny from alltidak akan memberikan 404 tetapi 403. Anda masih dapat mengakses file / folder menggunakan PHP / Perl dll tetapi tidak menggunakan permintaan web. Anda dapat membuka pertanyaan baru jika itu tidak menjawab pertanyaan Anda.
anubhava
52

Anda juga dapat menolak akses ke folder menggunakan RedirectMatch

Tambahkan baris berikut ke htaccess

RedirectMatch 403 ^/folder/?$

Ini akan mengembalikan 403 forbiddenkesalahan untuk folder yaitu: http://example.com/folder/tetapi itu benar-benar memblokir akses ke file dan folder di dalam folder itu, jika Anda ingin memblokir semua yang ada di dalam folder maka ubah saja pola regex ke ^/folder/.*$.

Pilihan lain adalah mod-rewrite Jika url-rewrting-modulediaktifkan, Anda dapat menggunakan sesuatu seperti berikut ini di root/.htaccss:

RewriteEngine on

RewriteRule ^folder/?$ - [F,L]

Ini secara internal akan memetakan permintaan untuk folderke forbiddenhalaman kesalahan.

Amit Verma
sumber
1
Dengan Apache 2.22 solusi terbaik adalah yang pertama: RedirectMatch .....
John
6
Lebih suka jawaban ini, daripada membuat banyak .htaccessfile di setiap direktori yang harus saya tolak aksesnya.
DanMad
40

Dalam sebuah .htaccess file yang perlu Anda gunakan

Deny from  all

Masukkan ini site/includes/.htaccessuntuk membuatnya spesifik ke includesdirektori

Jika Anda hanya ingin melarang daftar file direktori yang dapat Anda gunakan

Options -Indexes 
Andy
sumber
2
Apakah ini rekursif?
Abdillah
@Abdillah Ya itu
Oliver M Grech
18

Kami akan mengatur direktori menjadi sangat aman, menolak akses untuk semua jenis file. Di bawah ini adalah kode yang ingin Anda masukkan ke file .htaccess.

Order Allow,Deny 
Deny from all 

Karena kita sekarang telah mengatur keamanan, kita sekarang ingin mengizinkan akses ke jenis file yang kita inginkan. Untuk melakukannya, tambahkan kode di bawah ini ke file .htaccess di bawah kode keamanan yang baru saja Anda masukkan.

<FilesMatch "\.(jpg|gif|png|php)$">
Order Deny,Allow
   Allow from all
</FilesMatch>

.htaccessFile akhir Anda akan terlihat seperti

Order Allow,Deny 
Deny from all 

<FilesMatch "\.(jpg|gif|png|php)$">
Order Deny,Allow
   Allow from all
</FilesMatch>

Sumber dari Izinkan akses ke jenis file tertentu di direktori yang dilindungi

arthankamal
sumber
Jawaban ini menyelamatkan saya dari sakit kepala. Bekerja seperti pesona.
Saya berusaha keras tetapi saya menangis lebih keras
9

Anda dapat membuat file .htaccess untuk folder tersebut, yang seharusnya ditolak aksesnya

Deny from  all

atau Anda dapat mengarahkan ke halaman 404 khusus

Redirect /includes/ 404.html
Marvin
sumber
6

Masukkan saja .htaccess ke folder yang ingin Anda batasi

## no access to this folder

# Apache 2.4
<IfModule mod_authz_core.c>
    Require all denied
</IfModule>

# Apache 2.2
<IfModule !mod_authz_core.c>
    Order Allow,Deny
    Deny from all
</IfModule>

Sumber: Sumber MantisBT .

Bapak baptis
sumber
4

Anda juga dapat meletakkan ini IndexIgnore * di file .htaccess root Anda untuk menonaktifkan daftar file semua direktori situs web Anda termasuk sub-dir

ravisoni
sumber
6
Ini tidak menonaktifkan daftar file, tetapi memberitahu autoindexer untuk mengabaikan semua file saat membuat indeks. Untuk menonaktifkan daftar file, Anda akan menggunakan Options -Indexes.
Vladimir Kornea
3

Membuat index.php, index.html, index.htm tidak aman. Karena, siapa pun dapat mengakses file Anda dalam direktori yang ditentukan dengan menebak nama file. Contoh: http://yoursite.com/includes/file.dat Jadi, metode yang disarankan adalah membuat file .htaccess untuk menolak semua pengunjung;). Selamat bersenang-senang !!

Meraj
sumber
2

Anda dapat melakukan ini secara dinamis seperti itu:

mkdir($dirname);
@touch($dirname . "/.htaccess");
  $f = fopen($dirname . "/.htaccess", "w");
  fwrite($f, "deny from all");
fclose($f);
RatajS
sumber
0

Untuk beberapa alasan yang saya tidak mengerti, membuat folder / .htaccess dan menambahkan Tolak dari Semua gagal berfungsi untuk saya. Saya tidak tahu mengapa, tampaknya sederhana tetapi tidak berhasil, menambahkan RedirectMatch 403 ^ / folder /.*$ ke root htaccess bekerja sebagai gantinya.

Chimdi
sumber