Cách ngăn truy cập trực tiếp vào thư mục trong PHP

Đây là hướng dẫn về cách ngăn người dùng truy cập trực tiếp vào tệp bao gồm PHP trong trình duyệt của họ. Một số tệp bao gồm nhất định có thể dựa vào các biến bên ngoài từ các tệp khác. Do đó, chúng có thể đưa ra lỗi và cung cấp thông tin hệ thống nhạy cảm nếu người dùng tải chúng trực tiếp.

Từ chối quyền truy cập vào tất cả các tệp trong thư mục bao gồm của bạn

Nếu các tệp bao gồm PHP của bạn được đặt trong một thư mục cụ thể, bạn có thể yêu cầu máy chủ web của mình từ chối tất cả quyền truy cập vào nó

apache

Nếu bạn đang sử dụng Apache, bạn có thể tạo một. htaccess và đặt nó vào thư mục được đề cập. Cái này. htaccess phải chứa các lệnh sau

order deny,allow
deny from all

ở trên. htaccess yêu cầu Apache trả về phản hồi “403 Forbidden” nếu ai đó cố gắng truy cập vào thư mục được đề cập

Nginx

Thật không may, Nginx không hỗ trợ. tập tin htaccess. Do đó, bạn sẽ cần chỉnh sửa tệp cấu hình khối máy chủ của mình để chứa các nội dung sau

location ~ /[includes|config] {
    deny all;
    return 403;
}

Mục nhập vị trí ở trên yêu cầu Nginx ngăn truy cập web vào hai thư mục có tên là “gồm” và “config”. Nếu người dùng cố gắng truy cập các thư mục này, họ sẽ gặp lỗi “403 Forbidden”

Rõ ràng, bạn sẽ cần sửa đổi cấu hình ở trên để phù hợp với các thư mục mà bạn muốn chặn

Sử dụng PHP

Nếu bạn không muốn thay đổi giá trị cấu hình máy chủ, thì bạn có thể sử dụng phương pháp chỉ dành cho PHP. Điều này liên quan đến việc xác định một hằng số trong tập lệnh chính của bạn

Thí dụ

//Example CONSTANT called SITE_URL.
define['SITE_URL', '//test.com'];

Sau đó, ở đầu các tệp bao gồm của bạn, bạn có thể kiểm tra xem hằng số ở trên đã được xác định chưa

//Check if CONSTANT called SITE_URL is defined.
if[!defined['SITE_URL']] {
    //Send 403 Forbidden response.
    header[$_SERVER["SERVER_PROTOCOL"] . " 403 Forbidden"];
    //Kill the script.
    exit;
}

Nếu hằng số chưa được xác định, thì chúng tôi giả định rằng tệp bao gồm đang được truy cập trực tiếp qua URL. Do đó, chúng tôi gửi phản hồi 403 Forbidden và tắt tập lệnh

Hạn chế của phương pháp này là bạn sẽ phải thêm kiểm tra ở trên vào đầu tất cả các tệp bao gồm của mình. Bạn cũng sẽ phải đảm bảo rằng hằng số tồn tại trong tập lệnh PHP có thể truy cập công khai

Đặt các tệp bên ngoài thư mục gốc của tài liệu

Bạn cũng có thể đặt các tệp PHP của mình bên ngoài gốc tài liệu của máy chủ web của bạn. Điều này sẽ khiến chúng không thể truy cập được qua URL HTTP

Gốc tài liệu thường được gọi là public_html, www hoặc html, tùy thuộc vào thiết lập của bạn

Ví dụ: gốc tài liệu của bạn có thể được đặt tại. /var/www/html/

Thư mục bao gồm của bạn có thể được đặt tại. /var/www/bao gồm/

Nếu bạn có một tệp có tên là hàm. php trong thư mục bao gồm của bạn và bạn muốn đưa tệp đó vào chỉ mục của mình. php trong thư mục gốc của tài liệu có thể truy cập công khai, bạn có thể làm điều này

Tôi đã tạo một chủ đề tùy chỉnh và sử dụng npm cho một số gói. Mọi thứ hoạt động tốt nhưng thực tế là tôi có thể truy cập trực tiếp vào tất cả các tệp trong thư mục chủ đề của mình [*. php hoặc gói. json]

Làm thế nào tôi có thể ngăn chặn điều này?

Cảm ơn bạn

Đang xem 4 trả lời - 1 đến 4 [trong tổng số 4]

  • Vui sướng

    [@vui vẻ]

    Tôi đặt mục này ở đầu chỉ mục của mình. tập tin php.
    ______4
    Tôi đã nghĩ sẽ đưa nó vào tất cả các tệp PHP, nhưng chỉ mới lập chỉ mục. php.

    Trình bắt đầu chủ đề qlpo

    [@qlpo]

    Vì vậy, tôi vừa thử nghiệm chủ đề “twentytwentyone” đã có một vài gói.
    Mỗi cấu hình [gói. json, postcss. cấu hình. js, v.v.] trong thư mục chủ đề có thể được truy cập trực tiếp bằng liên kết url.
    Đây có phải là sự cố bảo mật không?

    Vui sướng

    [@vui vẻ]

    Tại sao đây là sự cố bảo mật?
    Tệp phải có thể truy cập được để trình duyệt tải tệp.

    Trình bắt đầu chủ đề qlpo

    [@qlpo]

    Tôi đã quen với laravel, nơi mọi thứ được giấu kín và không thể truy cập qua các liên kết trực tiếp. Tuy nhiên, nếu đây là cách phù hợp với wordpress và không gây ra bất kỳ vấn đề bảo mật nào, tôi sẽ tiếp tục chơi với nó. Có rất nhiều niềm vui khi học cách hoạt động của wordpress

    Làm cách nào để dừng truy cập trực tiếp vào một trang mà không cần đăng nhập bằng PHP?

    Bản sao có thể có của Cách tạo chuyển hướng trong PHP? . Tháng Một 25, 2016 lúc 10. 13
    Đặt biến phiên sau khi đăng nhập và hủy chúng sau khi đăng xuất. tạo một tệp php riêng để kiểm tra xem $_SESSION có được đặt không. Nếu nó được đặt thì không làm gì khác chuyển hướng đến đăng nhập. php. – tơ nhân tạo. Tháng Một 25, 2016 lúc 10. 15

    Làm cách nào để ngăn truy cập URL trực tiếp vào các tệp của tôi từ bên ngoài trang web của tôi?

    Làm cách nào để ngăn một tệp truy cập URL trực tiếp? .
    biểu thức chính quy
    apache
    htaccess
    viết lại mod
    liên kết nóng

    Làm cách nào để bảo mật các tệp PHP trên máy chủ?

    Xem Cài đặt PHP .
    Tạo một tệp văn bản với một. phần mở rộng php. Bản sao XML. .
    Tải nó lên máy chủ của bạn vào [tốt nhất là] một thư mục được bảo vệ bằng mật khẩu
    Nhập tên người dùng và mật khẩu của bạn để truy cập thư mục được bảo vệ và xem trang kết quả
    Lưu hoặc in trang kết quả vào máy tính cục bộ của bạn để tham khảo
    xóa

    Lệnh ini PHP nào nên bị vô hiệu hóa để ngăn việc thực thi tập lệnh PHP từ xa thông qua cấu trúc bao gồm hoặc yêu cầu?

    Để tắt bao gồm các tệp từ xa trong mã, hãy thêm các dòng sau vào php. ban đầu. " allow_url_include 0" và "allow_url_fopen 0" . Các chức năng cho phép PHP thực thi các lệnh của hệ điều hành nên bị vô hiệu hóa nếu ứng dụng không cần đến chúng. Làm như vậy sẽ giúp ngăn chặn các lỗ hổng chèn lệnh.

Chủ Đề