2012-03-22 37 views
6

Tôi có các thư mục con khác nhau trên trang web của mình và tôi muốn người dùng không thể truy cập chúng thông qua URL nhưng đồng thời các tệp PHP chính của tôi có thể bao gồm chúng hoặc sử dụng chúng dưới dạng hành động trên biểu mẫu hoặc liên kết..htaccess chỉ cho phép truy cập vào các tệp từ bao gồm

tôi đã cố gắng sử dụng một .htaccess với

<Files *> 
    Order Allow,Deny 
    Deny from All 
</Files> 

nhưng nó từ chối tất cả các truy cập thậm chí từ bên trong kịch bản của riêng tôi. Hợp lý như tôi đã phát hiện ra, nhưng tôi không thể biết cách làm cho nó hoạt động. Bất kỳ ý tưởng?

P.S. Mối quan tâm chính của tôi là một số tệp không được bao gồm trong các tệp PHP chính NHƯNG chúng được liên kết ở đó và mã của chúng kết thúc bằng một số header('Location: ../index.php'); quay trở lại trang chính của dự án.

Trả lời

1

Thông thường để bảo vệ những tập tin logic từ truy cập công cộng bạn có thể

  1. đặt nó trong thư mục được bảo vệ, trên htdocs
  2. thêm một tấm séc trị liên tục công .. if(!is_defined(some_root_const)){die();}
  3. thay đổi phần mở rộng cho .inc hoặc một cái gì đó .. và từ chối với .htaccess dựa trên đó
3

Có một phương pháp an toàn hơn nữa. Lưu trữ các tệp bao gồm của bạn bên dưới các thư mục có thể truy cập web. Vì vậy, nếu các tập tin web của bạn đang ở đây ...

/var/www/mysite.com/

cửa hàng của bạn bao gồm các file ở đây:

/var/includes/

Sau đó, bao gồm chúng với đường dẫn đầy đủ ...

include '/var/includes/myincludes.inc.php'; 

Từ trang web, tệp myincludes.inc.php hoàn toàn không thể truy cập được.

1

đặt mã ứng dụng của bạn bên ngoài thư mục html công khai của bạn. sau đó bạn có thể thêm đường dẫn bao gồm ở đầu tập lệnh để cho phép tập lệnh của bạn truy cập chúng như thể chúng nằm trong cùng một thư mục.

http://php.net/manual/en/function.set-include-path.php

3

Làm điều này:

<Files *> 
    Order Deny,Allow 
    Allow from 192.168.100.123 127.0.0.1 
    Deny from all 
</Files> 

Danh sách các địa chỉ IP sẽ được host cụ thể mà bạn cho phép, như localhost.

Điều này cũng làm việc với chỉ thị, không chỉ là tệp, nếu bạn chỉ muốn một số thư mục bị chặn.

+0

Tôi đã thử nó với ' \t tự Allow, Deny \t Allow from 127.0.0.1 \t deny from all ' nhưng nó chặn tất cả các tệp được gọi từ các hàm AJAX. –

+0

Tất nhiên, bởi vì chúng được yêu cầu bởi khách hàng. Bạn không thể "cho phép ứng dụng khách" và "không cho phép ứng dụng khách" phân phối tệp. – Ray

0

Trong bạn .htaccess, bạn sẽ phải chỉ định IP, máy chủ nào bạn muốn cho phép và bạn cũng có thể thực hiện trên mỗi thư mục. ví dụ:

<Directory /dir/to/block> 
    Order Allow,Deny 
    Allow from 192.168.0.1 4.4.4.4 
    Deny from All 
</Directory> 
<Directory /dir/to/allow> 
    Order Allow, Deny 
    Allow from All 
</Directory> 
6

Tôi nhìn thấy rất nhiều câu trả lời với phép, từ chối không Deny, Allow

Trình tự của các vấn đề này và đang gây ra vấn đề. Bạn đang nói với máy tính rằng từ chối là quan trọng hơn cho phép, bởi vì nó được liệt kê cuối cùng. Để hiển thị cho bạn ... nếu bạn nói:

<Files .htaccess> 
Order Allow,Deny 
Deny From All 
Allow From xxx.xxx.xxx.xxx 127.0.0.1 
</Files> 

Bạn đang nói đầu tiên Cho phép mọi người được phép, sau đó Từ chối tất cả ... Mọi thứ vẫn từ chối TẤT CẢ.

Nếu bạn chuyển sang Từ chối, Cho phép bạn nói Từ chối tất cả, sau đó Cho phép bất kỳ ai được phép.

<Files .htaccess> 
Order Deny,Allow 
Deny From All 
Allow From xxx.xxx.xxx.xxx 127.0.0.1 
</Files> 

Cho phép lệnh, quan trọng hơn, vì đó là lệnh cho phép được liệt kê sau lệnh Cho phép.

xxx.xxx.xxx.xxx = IP của bạn

Các vấn đề liên quan