PHP仅允许访问特定的引用url/页面


PHP Allow access to specific referrer url/page only

所以我的问题很简单,我使用了以下方法允许通过引用者的域名访问php脚本,但我想只允许与完整url匹配的引用者访问。

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

因此,如果引用者url匹配http://www.domain.com/page.html如果阻止,则允许访问else。

这是不安全的,因为引用数据很容易被伪造。然而,如果它仍然符合您的需求,那么您应该已经对代码很满意了,因为$_SERVER['HTTP_REFERER']包含完整的引用URL,而不仅仅是域。事实上,你现在的代码需要一些调整,因为它不能这样工作:

<?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,因为它可能会被欺骗(正如其他人所指出的)。此外,一些防火墙和安全软件会重写或删除referer,并不是所有浏览器都能正确报告。

如果是敏感数据,那么我个人会在页面之间传递散列。