Từ chối quyền truy cập vào một thư mục cụ thể trong .htaccess


130

Tôi đang cố gắng từ chối người dùng truy cập vào site/includesthư mục bằng cách thao tác URL.

Tôi không biết nếu tôi phải từ chối tất cả mọi thứ và tự đưa ra các ngoại lệ riêng lẻ để cho phép, nếu tôi chỉ có thể từ chối một thư mục này hoặc nếu có chức năng viết lại có thể được sử dụng.

Ví dụ cụ thể: Tôi không muốn xem các tệp thư mục bằng cách nhập localhost/site/includesvào URL.


1
chỉ để không cho phép các thư mục liệt kê ghi Options -Indexesvào tệp .htaccess nằm trong thư mục gốc

Câu trả lời:


205

Tạo site/includes/.htaccesstập tin và thêm dòng này:

Deny from all

5
Chào!! anubhava Tôi đã sử dụng điều này để vô hiệu hóa truy cập trực tiếp vào các tệp api của mình trong thư mục / api nhưng bây giờ tất cả các cuộc gọi dịch vụ web gửi 403 trạng thái bị cấm .. Tôi chỉ muốn chặn truy cập khi ai đó truy cập nó từ trình duyệt.
ravisoni

9
Đối với một máy chủ web, không có sự khác biệt thực sự giữa các yêu cầu giữa trình duyệt và không trình duyệt.
anubhava

Tôi sử dụng nginx và tôi không thể sử dụng .htaccess. Vì vậy, làm thế nào tôi có thể làm điều đó mà không có .htaccess? cảm ơn
Shafizadeh

Làm thế nào tôi có thể truy cập các tập tin của thư mục / thư mục phụ nếu tôi từ chối tất cả? Các tập tin vào thư mục / thư mục phụ cho lỗi 404.
Vikas Khunteta

2
Deny from allsẽ không cung cấp 404 nhưng 403. Bạn vẫn có thể truy cập tệp / thư mục bằng PHP / Perl, v.v. nhưng không sử dụng yêu cầu web. Bạn có thể mở một câu hỏi mới nếu điều đó không trả lời câu hỏi của bạn.
anubhava

52

Bạn cũng có thể từ chối truy cập vào một thư mục bằng cách sử dụng RedirectMatch

Thêm dòng sau vào htaccess

RedirectMatch 403 ^/folder/?$

Điều này sẽ trả về một 403 forbiddenlỗi cho thư mục tức là: http://example.com/folder/nhưng nó chặn quyền truy cập vào các tệp và thư mục bên trong thư mục đó, nếu bạn muốn chặn mọi thứ trong thư mục thì chỉ cần thay đổi mẫu regex thành ^/folder/.*$.

Một tùy chọn khác là mod-rewrite Nếu url-rewrting-moduleđược bật, bạn có thể sử dụng một cái gì đó như sau root/.htaccss:

RewriteEngine on

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

Điều này sẽ trong nội bộ bản đồ một yêu cầu cho folderđến forbiddentrang lỗi.


1
Với Apache 2.22, giải pháp tốt nhất là giải pháp đầu tiên: RedirectMatch .....
John

6
Rất thích câu trả lời này, hơn là tạo nhiều .htaccesstệp trong mọi thư mục mà tôi cần từ chối truy cập.
DanMad

40

Trong một .htaccesstập tin bạn cần sử dụng

Deny from  all

Đặt cái này vào site/includes/.htaccessđể làm cho nó cụ thể vào includesthư mục

Nếu bạn chỉ muốn không cho phép một danh sách các tập tin thư mục bạn có thể sử dụng

Options -Indexes 

2
Đây có phải là đệ quy?
Abdillah

@Abdillah Đúng vậy
Oliver M Grech

18

Chúng tôi sẽ đặt thư mục rất an toàn, từ chối quyền truy cập cho tất cả các loại tệp. Dưới đây là mã bạn muốn chèn vào tệp .htaccess.

Order Allow,Deny 
Deny from all 

Vì chúng tôi đã thiết lập bảo mật, bây giờ chúng tôi muốn cho phép truy cập vào các loại tệp mong muốn của chúng tôi. Để làm điều đó, hãy thêm mã dưới đây vào tệp .htaccess theo mã bảo mật bạn vừa chèn.

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

.htaccesstập tin cuối cùng của bạn sẽ trông như thế nào

Order Allow,Deny 
Deny from all 

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

Nguồn từ Cho phép truy cập vào các loại tệp cụ thể trong thư mục được bảo vệ


Câu trả lời này đã cứu tôi rất nhiều đau đầu. Hoạt động như một lá bùa.
Tôi cố gắng rất nhiều nhưng tôi khóc nhiều hơn vào

9

Bạn có thể tạo tệp .htaccess cho thư mục, bạn nên từ chối quyền truy cập với

Deny from  all

hoặc bạn có thể chuyển hướng đến một trang 404 tùy chỉnh

Redirect /includes/ 404.html

6

Chỉ cần đặt .htaccess vào thư mục bạn muốn hạn chế

## 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>

Nguồn: Nguồn MantisBT .


4

Bạn cũng có thể đặt nó IndexIgnore * ở tệp .htaccess gốc của bạn để vô hiệu hóa danh sách tệp của tất cả các thư mục trang web của bạn bao gồm cả thư mục con


6
Điều này không vô hiệu hóa danh sách tệp, nhưng yêu cầu trình tự động bỏ qua tất cả các tệp khi xây dựng chỉ mục. Để vô hiệu hóa danh sách tập tin, bạn sẽ sử dụng Options -Indexes.
Vladimir Kornea

3

Tạo index.php, index.html, index.htm không an toàn. Trở thành, bất kỳ ai cũng có thể có quyền truy cập vào các tệp của bạn trong thư mục được chỉ định bằng cách đoán tên tệp. Ví dụ: http://yoursite.com/includes/file.dat Vì vậy, phương pháp được đề xuất là tạo tệp .htaccess để từ chối tất cả khách truy cập;). Chúc vui vẻ !!


2

Bạn có thể làm điều này một cách linh hoạt theo cách đó:

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

0

Vì một số lý do mà tôi không hiểu, việc tạo thư mục / .htaccess và thêm Từ chối từ Tất cả đều thất bại đối với tôi. Tôi không biết tại sao, nó có vẻ đơn giản nhưng không hoạt động, thêm RedirectMatch 403 ^ / thư mục /.*$ vào root htaccess hoạt động thay thế.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.