1: Kiểm tra số lượng tập tin bao gồm
if( count(get_included_files()) == ((version_compare(PHP_VERSION, '5.0.0', '>='))?1:0) )
{
exit('Restricted Access');
}
Logic: PHP thoát nếu số lượng tối thiểu bao gồm không được đáp ứng. Lưu ý rằng trước PHP5, trang cơ sở không được coi là bao gồm.
2: Xác định và xác minh hằng số toàn cầu
// In the base page (directly accessed):
define('_DEFVAR', 1);
// In the include files (where direct access isn't permitted):
defined('_DEFVAR') or exit('Restricted Access');
Logic: Nếu hằng số không được xác định, thì việc thực thi đã không bắt đầu từ trang cơ sở và PHP sẽ ngừng thực thi.
Lưu ý rằng vì mục đích di động qua các nâng cấp và thay đổi trong tương lai, làm cho phương thức xác thực này được mô đun hóa sẽ giảm đáng kể chi phí mã hóa vì các thay đổi sẽ không cần phải được mã hóa cứng cho mỗi tệp.
// Put the code in a separate file instead, say 'checkdefined.php':
defined('_DEFVAR') or exit('Restricted Access');
// Replace the same code in the include files with:
require_once('checkdefined.php');
Bằng cách này, mã bổ sung có thể được thêm vào checkdefined.php
cho mục đích ghi nhật ký và phân tích, cũng như để tạo phản hồi thích hợp.
Tín dụng khi tín dụng đáo hạn: Ý tưởng tuyệt vời về tính di động xuất phát từ câu trả lời này .
3: Ủy quyền địa chỉ từ xa
// Call the include from the base page(directly accessed):
$includeData = file_get_contents("http://127.0.0.1/component.php?auth=token");
// In the include files (where direct access isn't permitted):
$src = $_SERVER['REMOTE_ADDR']; // Get the source address
$auth = authoriseIP($src); // Authorisation algorithm
if( !$auth ) exit('Restricted Access');
Hạn chế với phương thức này là thực thi độc lập, trừ khi mã thông báo phiên được cung cấp với yêu cầu nội bộ. Xác minh thông qua địa chỉ vòng lặp ngược trong trường hợp cấu hình máy chủ đơn hoặc danh sách trắng địa chỉ cho cơ sở hạ tầng máy chủ đa máy chủ hoặc cân bằng tải.
4: Ủy quyền mã thông báo
Tương tự như phương pháp trước đó, người ta có thể sử dụng GET hoặc POST để chuyển mã thông báo ủy quyền cho tệp bao gồm:
if($key!="serv97602"){header("Location: ".$dart);exit();}
Một phương pháp rất lộn xộn, nhưng có lẽ cũng an toàn và linh hoạt nhất cùng một lúc, khi được sử dụng đúng cách.
5: Cấu hình máy chủ web cụ thể
Hầu hết các máy chủ cho phép bạn gán quyền cho các tệp hoặc thư mục riêng lẻ. Bạn có thể đặt tất cả bao gồm trong các thư mục bị hạn chế như vậy và để máy chủ được cấu hình để từ chối chúng.
Ví dụ trong APACHE, cấu hình được lưu trữ trong .htaccess
tệp. Hướng dẫn tại đây .
Tuy nhiên, xin lưu ý rằng các cấu hình dành riêng cho máy chủ không được tôi khuyên dùng vì chúng không tốt cho tính di động trên các máy chủ web khác nhau. Trong các trường hợp như Hệ thống quản lý nội dung có thuật toán từ chối phức tạp hoặc danh sách các thư mục bị từ chối khá lớn, nó chỉ có thể thực hiện các phiên cấu hình lại khá khủng khiếp. Cuối cùng, tốt nhất là xử lý mã này.
6: Đặt bao gồm trong một thư mục an toàn NGOÀI TRỜI gốc trang web
Ít thích nhất vì giới hạn truy cập trong môi trường máy chủ, nhưng là một phương pháp khá mạnh nếu bạn có quyền truy cập vào hệ thống tệp.
//Your secure dir path based on server file-system
$secure_dir=dirname($_SERVER['DOCUMENT_ROOT']).DIRECTORY_SEPARATOR."secure".DIRECTORY_SEPARATOR;
include($secure_dir."securepage.php");
Hợp lý:
- Người dùng không thể yêu cầu bất kỳ tập tin bên ngoài
htdocs
thư mục vì các liên kết sẽ nằm ngoài phạm vi của hệ thống địa chỉ của trang web.
- Máy chủ php truy cập hệ thống tệp nguyên bản và do đó có thể truy cập các tệp trên máy tính giống như cách một chương trình bình thường với các đặc quyền bắt buộc có thể.
- Bằng cách đặt các tệp đính kèm trong thư mục này, bạn có thể đảm bảo rằng máy chủ php có thể truy cập chúng, trong khi liên kết nóng bị từ chối cho người dùng.
- Ngay cả khi cấu hình truy cập hệ thống tệp của máy chủ web không được thực hiện đúng cách, phương pháp này sẽ ngăn các tệp đó vô tình trở thành công khai.
Xin thứ lỗi cho các quy ước mã hóa không chính thống của tôi. Bất kỳ thông tin phản hồi được đánh giá cao.