2012-10-22 27 views
6

Trang web php của tôi có nhiều tệp php, một số là dành cho giao diện người dùng và một số là tệp trợ giúp (tệp, giao tiếp thông qua cơ sở dữ liệu và nhau để trả về kết quả). Bây giờ tôi cần người dùng đó không thể thực thi các tệp trợ giúp từ url trực tiếp của họ.Làm cho các tập tin php ẩn từ thế giới bên ngoài

e.g. mydomain.com/login.php ---------- (Interface file, must be accessible to user) 
    mydomain.com/login_handle.php ----(Healper file, must not be accessible to user) 

Vì vậy, tôi cần là người dùng có thể thực hiện và duyệt mydomain.com/login.php nhưng phải ot có thể thực hiện mydomain.com/login_handle.php, trong khi login.php và handle_login.php giữ liên lạc và có thể truy cập lẫn nhau. Cảm ơn,

Chỉnh sửa: Xin lỗi nhưng tôi đang sử dụng shared hosting và có không có thư mục nào khác ngoài public_html.

+5

cửa hàng chúng bên ngoài webroot? – eggyal

+0

Các tệp php, vẫn có thể giao tiếp với nhau? –

+0

Lý tưởng nhất, điều duy nhất cần được lưu trữ trong webroot là bộ định tuyến của bạn; tất cả các yêu cầu phải được chuyển đến bộ định tuyến và sẽ có trách nhiệm bao gồm cả mã nằm ngoài webroot của bạn. –

Trả lời

4

Những điều đầu tiên tôi sẽ cố gắng:

  1. Move các tập tin bao gồm bên ngoài của các tài liệu gốc

  2. Di chuyển các tập tin bao gồm bên trong một thư mục khác và bảo vệ nó bằng cách sử .htaccess. Ngoài ra, hãy đổi tên các tệp bao gồm của bạn để kết thúc bằng .inc và tạo quy tắc dựa trên đó.

  3. Đảm bảo các tệp được bao gồm không xuất ra bất kỳ thứ gì; điều này không thực sự an toàn, nhưng nếu tệp của bạn chỉ chứa các hàm, định nghĩa lớp, v.v. mà không tạo ra bất kỳ đầu ra nào, nó sẽ chỉ hiển thị một trang trống.

Phương pháp hackish cho điều này có thể được thực hiện bằng cách sử dụng các hằng số:

index.php

<?php 

define('MY_CONSTANT', '123'); 

include('helper.php'); 

helper.php

<?php 

if (!defined('MY_CONSTANT')) { exit; } 

// we were called from another file 
// proceed 

Sửa

Cách tiếp cận thứ 2 từ trên có thể được thực hiện bằng cách:

  1. Tạo một thư mục bên dưới public_html, ví dụ includes/

  2. Move tất cả các file mà nên được bao gồm chỉ vào thư mục này

  3. Thêm dòng sau .htaccess bên:

    <FilesMatch "\.php$"> 
    Order allow, deny 
    Deny from all 
    </FilesMatch> 
    
+0

Vâng tôi thích giải pháp của bạn. Cảm ơn, –

+0

Nhưng để làm điều này, tôi đã viết một hằng số trong mỗi dòng, phải không? Có thể có bất kỳ giải pháp htaccess cho điều này? –

+0

@ user1706482 Vì vậy, tôi khuyên bạn nên chuyển tất cả các tệp được bao gồm vào thư mục con trước. –

1

Hãy thử sử dụng .htaccess.

Thay vì 127.0.0.1 ip này, bạn cần phải đặt địa chỉ ip máy chủ của mình.

<Files login_handle.php> 
    Order Allow,Deny 
    Deny from all 
    Allow from 127.0.0.1 
</Files> 
+0

Có Tôi cần một cái gì đó chính xác như thế này. Nhưng làm thế nào để làm cho nó hoạt động? –

+0

Chuyển đến thư mục public_html và mở tệp .htaccess hoặc tạo nếu nó không tồn tại. –

+0

Cảm ơn, câu trả lời của bạn chính xác là những gì tôi cần. Nhưng làm điều này cho thấy một lỗi bị cấm cho cả hai loại truy cập tức là tôi không thể đăng nhập trang bị cấm có nghĩa là ngay cả các tập tin nội bộ không thể truy cập? –

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