2011-01-06 40 views
11

Tôi có một tệp php kế thừa (bao gồm) một tệp PHP khác. Tất cả các tệp được kế thừa nằm trong một thư mục có tên "bao gồm". Tôi muốn có thể hạn chế mọi quyền truy cập trực tiếp vào thư mục này. Chỉ các tệp PHP trong máy chủ mới có thể giao tiếp với các tệp trong thư mục "bao gồm". Làm thế nào tôi có thể sử dụng .htaccess để đạt được mục tiêu đó?.htaccess để hạn chế quyền truy cập vào thư mục

FYI, tôi đã sử dụng đoạn mã sau và nó đã không làm việc

Order deny,allow 
deny from all 

Bất kỳ trợ giúp sẽ được đánh giá

+0

Nếu điều này không làm việc, nó có thể được httpd.conf mà được thiết lập để không đọc các tập tin .htaccess. Ví dụ: AllowOverride None Thay đổi thành thứ khác (ví dụ: AllowOverride All) và khởi động lại máy chủ web. – user535673

Trả lời

19

Nếu bạn không có tùy chọn thực sự di chuyển "bao gồm" thư mục bên ngoài của khu vực tài liệu gốc, và sử dụng include_path (tức là bạn không thể có được nó từ web), sau đó nhập

deny from all 

trong thư mục .htaccess trong thư mục đó.

Tuy nhiên, cách khác là sử dụng chỉ thị DEFINES để chỉ cho phép truy cập vào những chương trình đó bằng các tệp được ủy quyền cụ thể. Ví dụ, đặt

<?php defined('ACCESS_ALLOWED') or die('Restricted Access'); ?> 

trong top của các tập tin bao gồm, và sau đó đặt

<?php define('ACCESS_ALLOWED', 1); ?> 

trong các chương trình được phép bao gồm các tập tin.

Điều này sẽ ngăn không cho GET bình thường vào những tệp bao gồm các tệp chạy chúng và sẽ hoạt động với bất kỳ máy chủ web nào, không chỉ hỗ trợ các tệp htaccess.

3

tại của bạn bao gồm/.htaccess:

Order deny,allow 
deny from all 
+0

Đã thử nhưng không hoạt động –

2

Bạn có thể thực sự chỉ sử dụng số index.php và chuyển tiêu đề 404 bằng cách sử dụng header():

header('HTTP/1.1 404 Not Found', 404); 

IMO, điều này tốt hơn 403, vì nó giống như thư mục không tồn tại. Đối với các tập tin bao gồm, đặt dòng này trên include/require dòng đầu tiên của tập tin chính:

define('INCLUDED', true); 

Và trên tất cả các tập tin trong thư mục bao gồm, đặt này tại hầu hết các phần trên.

if (!defined(INCLUDED)) { 
    header('HTTP/1.1 404 Not Found', 404); 
} 
+2

Bạn cũng có thể muốn gọi exit(); sau tiêu đề, vì trang vẫn có thể thực thi. –

0

Tùy thuộc vào khả năng lựa chọn khác đặt ở mức cao hơn, bạn có thể cần phải sử dụng:

Satisfy all 
Order deny,allow 
Deny from all 

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

Satisfy any 

này đã ngăn chặ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ể từ chối truy cập trực tiếp vào thư mục bằng cách sử dụng các Chỉ thị sau trong htaccess hoặc máy chủ.cấu hình CONTEX:

Mod-alias dựa trên giải pháp

Redirect 403 ^/folder/.+$ 

này sẽ chuyển hướng tất cả các file và thư mục của dirs/đến 403 trang lỗi/cấm.

Mod-rewrite giải pháp cơ sở:

RewriteEngine on 

RewriteRule ^/?folder/.+$ - [F] 
Các vấn đề liên quan