簡體   English   中英

PHP僅允許訪問特定的引薦來源網址/頁面

[英]PHP Allow access to specific referrer url/page only

所以我的問題很簡單,我使用以下方法允許通過引用者的域名訪問PHP腳本,但我想只允許訪問匹配完整網址的引用。

<?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;
}
?>

因此,如果引薦來源網址與http://www.domain.com/page.html匹配,則允許訪問else,否則阻止它。

它不安全,因為引用者數據很容易被欺騙。 但是,如果它仍然符合您的需求,那么您的代碼就可以了,因為$_SERVER['HTTP_REFERER']包含完整的引薦來源網址而不僅僅是域名。 實際上,你現在的代碼需要一些調整,因為它不能像那樣工作:

<?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";
?>

請注意,如果在檢查是否符合要求之前檢查是否設置了HTTP_REFERER,那么人們會在沒有設置任何引用者的情況下訪問您的腳本,因此您應該在任何情況下進行檢查。 現在,檢查特定的URL要簡單得多:

<?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";
?>

你想保護什么?

你永遠不應該信任HTTP_REFERER,因為它可以被欺騙(正如其他人指出的那樣)。 此外,一些防火牆和安全軟件將重寫或刪除引用程序,並非所有瀏覽器都能正確報告它。

如果它是敏感數據,那么我個人會在頁面之間傳遞一個哈希值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM