từ chối truy cập trực tiếp vào một thư mục và tập tin bởi htaccess


133

Đây là kịch bản:

  • Có một index.phptập tin trong thư mục gốc
  • một số tập tin được bao gồm trong index.phpđó trong includesthư mục.
  • 1 tệp khác ( submit.php) nằm trong thư mục gốc cho hành động gửi biểu mẫu.

Tôi muốn hạn chế quyền truy cập trực tiếp của người dùng vào các tệp trong includesthư mục bằng htaccess. cũng cho submit.php. Nhưng bao gồm sẽ làm việc cho index.phptập tin. Giống như, nếu người dùng gõ www.domain.com/includes/somepage.php, nó sẽ hạn chế nó (có thể được chuyển hướng đến một trang lỗi).

Câu trả lời:


266

Tôi sẽ chỉ di chuyển includesthư mục ra khỏi web-root, nhưng nếu bạn muốn chặn truy cập trực tiếp vào toàn bộ includesthư mục, bạn có thể đặt một .htaccesstệp trong thư mục đó chỉ chứa:

deny from all

Bằng cách đó, bạn không thể mở bất kỳ tệp nào từ thư mục đó, nhưng bạn có thể đưa chúng vào php mà không gặp vấn đề gì.


7
Tập tin khác có thể thực hiện yêu cầu ajax cho tập tin có trong thư mục đó không?
Chaitanya Chandurkar

16
@ChaitanyaChandurkar Không, yêu cầu ajax là một yêu cầu http bình thường nên sẽ bị từ chối.
jeroen

Sr b / c Tôi lập trình web mới. Làm cách nào tôi có thể thêm một ngoại lệ để truy cập vào tệp index.php của mình?
PhátHV

Tôi đã sử dụng từ chối tất cả và nó đã giới hạn mọi url..không hiển thị trang đăng nhập .. :(
Aamir

@Aamir Điều đó là chính xác, không có url trong thư mục đó sẽ có thể truy cập được nhưng bạn có thể đưa chúng vào các tệp khác mà không gặp vấn đề gì.
jeroen

56

Đây là mod_rewritegiải pháp hoàn toàn dựa trên:

RewriteRule ^(includes/|submit\.php) - [F,L,NC]

Điều này sẽ hiển thị lỗi bị cấm sử dụng nếu URI chứa /includes/hoặc/submit.php


3
Tốt công việc giải quyết các tập tin gửi
CTS_AE

29

Có thể sử dụng chỉ thị Tệp và không cho phép truy cập vào tất cả các tệp, sau đó sử dụng lại để đặt các tệp có thể truy cập:

<Files ~ "^.*">
  Deny from all
</Files>

<Files ~ "^index\.php|css|js|.*\.png|.*\.jpg|.*\.gif">
  Allow from all
</Files>

6
Tôi không chắc chắn về người đã đăng câu hỏi liệu vấn đề của anh ấy có được giải quyết hay không, nhưng đây là nét đẹp của SO mà nhiều câu trả lời có thể giúp nhiều thành viên. Câu trả lời cuối cùng này đã giải quyết vấn đề của tôi. Tôi muốn cho phép các trang web có được tệp css nhưng không có quyền truy cập vào phông chữ ttf hoặc otf và bùng nổ! giải quyết.
Moxet Khan

sau này tôi không hủy truy cập các tập tin trong các thư mục con
Gintare Statkute

14

1 giải pháp dựa trên mod_alias lót:

RedirectMatch 403 ^/folder/file.php$

Điều này sẽ hiển thị lỗi bị cấm đối với /folder/file.php


1
+1 - Điều này thực sự rất tốt, vì thậm chí không ai có thể thấy tệp nào tồn tại nếu bạn áp dụng 404 cho toàn bộ thư mục, sử dụng regex ^folder.
bytecode77

9

Nếu tôi hiểu chính xác bạn chỉ muốn từ chối truy cập vào thư mục bao gồm?

Một .htaccess với chỉ thị 'DENY TỪ TẤT CẢ' được đặt trong thư mục bao gồm sẽ thực hiện thủ thuật.


8

Q của bạn có hai phần, cả giải pháp của jeroen và anubhava đều hoạt động cho phần I - từ chối quyền truy cập / bao gồm. anubhava's cũng hoạt động cho phần II. Tôi thích cái thứ hai hơn bởi vì tôi vẫn sử dụng một cái DOCROOT/.htaccessvà điều này sẽ giữ tất cả các điều khiển như vậy trong một tệp.

Tuy nhiên, điều tôi muốn thảo luận là khái niệm "từ chối truy cập submit.php". Nếu bạn không muốn sử dụngsubmit.php thì tại sao lại có nó trong DOCROOT? Tôi nghi ngờ rằng câu trả lời ở đây là bạn sử dụng nó làm mục tiêu hành động trong một số biểu mẫu và chỉ muốn nó bị sa thải khi biểu mẫu được gửi và không trực tiếp, ví dụ như từ một spambot.

Nếu điều này là đúng thì bạn không thể sử dụng phần II của anubhava vì điều này sẽ khiến cho biểu mẫu của bạn bị lỗi. Những gì bạn có thể làm ở đây là (i) với .htaccesskiểm tra để đảm bảo rằng người giới thiệu là trang chỉ mục của riêng bạn:

RewriteCond %{HTTP_REFERRER} !=HTTP://www.domain.com/index.php   [NC]
RewriteRule ^submit\.php$    -                                   [F]

Và (ii) trong trình tạo biểu mẫu index.php của bạn bao gồm một số trường ẩn cho dấu thời gian và xác thực. Việc xác nhận có thể là, 10 ký tự đầu tiên của MD5 của dấu thời gian và một số bí mật nội bộ. Khi xử lý việc gửi, sau đó bạn có thể (i) xác thực rằng dấu thời gian và xác thực khớp và (ii) dấu thời gian nằm trong khoảng 15 phút của thời gian hiện tại.

Điều này bạn có thể ngăn chặn spam vì cách thực tế duy nhất mà một người gửi thư rác có thể có được một cặp dấu thời gian / xác thực hợp lệ sẽ là phân tích một biểu mẫu, nhưng scrape này sẽ chỉ có thời gian 15 phút.


6

Tùy thuộc vào các tùy chọn khác có thể được đặt ở mức cao hơn, bạn có thể cần đặt các mục sau trong tệp .htaccess của mình trong thư mục bao gồm:

Satisfy all
Order deny,allow
Deny from all

Tôi chạy vào đây khi thư mục trên xác định xác thực cơ bản bao gồm cả dòng:

Satisfy any

Điều này đã ngăn cản sự từ chối của tôi từ tất cả để có hiệu lực vì người dùng đã được xác thực.


1

Bạn có thể thêm lệnh dưới đây vào .htaccesstập tin

Deny from all
ErrorDocument 403 "nothing is here"

Nó sẽ hiển thị thông báo "không có gì ở đây" trong trường hợp truy cập trái phép.

Nếu bạn muốn chuyển hướng theo mã lỗi đến một trang nhất định thì bạn có thể xác định lệnh như sau:

ErrorDocument 404 "/errors/404.html"

Nó sẽ chuyển hướng đến /errors/404.htmlvà hiển thị trang tùy chỉnh không tìm thấy màn hình.

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.