所以我的问题很简单,我使用以下方法允许通过引用者的域名访问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;
}
?>
Run Code Online (Sandbox Code Playgroud)
因此,如果引荐来源网址与http://www.domain.com/page.html匹配,则允许访问else,否则阻止它.
Gar*_*ron 25
它不安全,因为引用者数据很容易被欺骗.但是,如果它仍然符合您的需求,那么您的代码已经很好了,因为它$_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";
?>
Run Code Online (Sandbox Code Playgroud)
请注意,如果在检查是否符合要求之前检查是否设置了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";
?>
Run Code Online (Sandbox Code Playgroud)
小智 6
你想保护什么?
你永远不应该信任HTTP_REFERER,因为它可以被欺骗(正如其他人指出的那样).此外,一些防火墙和安全软件将重写或删除引用程序,并非所有浏览器都能正确报告它.
如果它是敏感数据,那么我个人会在页面之间传递一个哈希值.
| 归档时间: |
|
| 查看次数: |
38314 次 |
| 最近记录: |