2013-02-13 54 views
8

Vì vậy, câu hỏi của tôi là ive đơn giản sử dụng phương pháp sau để cho phép truy cập tập lệnh php thông qua tên miền của người giới thiệu nhưng tôi muốn cho phép truy cập chỉ các liên kết giới thiệu khớp với url đầy đủ.PHP Chỉ cho phép truy cập vào url/trang giới thiệu cụ thể

<?php 
if (isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER'] != 'domain.com') 
{ 
echo "Eexcuting code here"; 
} else { 
echo('Hot Linking Not Permitted'); 
// display some message/image/video 
exit; 
} 
?> 

Vì vậy, nếu url liên kết trùng khớp với http://www.domain.com/page.html thì cho phép truy cập khác nếu chặn.

+0

Điều này sẽ không an toàn. Tôi có thể dễ dàng truy cập trang của bạn, nếu tôi muốn. – Peon

+2

Ok. Vậy bạn cần chúng tôi làm gì? – str

+0

Những hình cầu này được duyệt bởi trình duyệt. Mọi người đều có thể sửa đổi chúng. –

Trả lời

20

Sẽ không an toàn vì dữ liệu liên kết giới thiệu có thể dễ dàng bị giả mạo. Tuy nhiên, nếu nó vẫn phù hợp với nhu cầu của bạn, thì bạn nên sử dụng mã của mình, vì $_SERVER['HTTP_REFERER'] chứa URL liên kết giới thiệu đầy đủ chứ không phải chỉ là tên miền. Trên thực tế, mã hiện tại của bạn cần một số điều chỉnh bởi vì nó không thể làm việc như thế:

<?php 
// This is to check if the request is coming from a specific domain 
$ref = $_SERVER['HTTP_REFERER']; 
$refData = parse_url($ref); 

if($refData['host'] !== 'domain.com') { 
    // Output string and stop execution 
    die("Hotlinking not permitted"); 
} 

echo "Executing code here"; 
?> 

Lưu ý rằng nếu bạn kiểm tra xem HTTP_REFERER được thiết lập trước khi kiểm tra nếu đó là những gì bạn muốn, mọi người sẽ nhận được kịch bản của bạn mà không cần bất kỳ giới thiệu đặt ở tất cả, vì vậy bạn nên kiểm tra nó trong mọi trường hợp. Bây giờ, việc kiểm tra một URL cụ thể đơn giản hơn nhiều:

<?php 
// This is to check if the request is coming from a specific URL 
$ref = $_SERVER['HTTP_REFERER']; 

if($ref !== 'http://domain.com/page.html') { 
    die("Hotlinking not permitted"); 
} 

echo "Executing code here"; 
?> 
+0

Cảm ơn rất nhiều gargon chỉ là những gì tôi đã sau. Nhiều đánh giá cao. – C0nw0nk

+0

Cũng có thể hoạt động như một kết quả cho chuỗi truy vấn ở cuối url không? "page.html? 123" – C0nw0nk

+0

Có, nó cũng sẽ phù hợp với chúng. – Gargron

6

Bạn đang cố gắng bảo vệ điều gì?

Bạn không bao giờ nên tin tưởng HTTP_REFERER vì nó có thể bị giả mạo (như những người khác đã chỉ ra). Ngoài ra một số tường lửa và phần mềm bảo mật sẽ viết lại hoặc xóa người giới thiệu và không phải tất cả trình duyệt đều báo cáo chính xác.

Nếu đó là dữ liệu nhạy cảm thì cá nhân tôi sẽ chuyển băm giữa các trang.

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