我有一个名为image.php
的文件和一个名为index.html
的文件。
此代码位于index.html
<img src="image.php">
现在,image.php
文件是否可以知道它是由index.html
文件调用的?
若然,怎么样?
答案 0 :(得分:3)
浏览器通常会为图像请求发送“Referer”(原文如此)标题,其中包含包含图像链接的页面的URL。
可以使用$_SERVER['HTTP_REFERER']
变量访问(注意异常拼写)。
请注意,此变量并不总是准确的;用户可以选择通过不发送引用标题(使用某种极小的隐私工具)来保护他们的隐私,并且他们甚至可以修改他们的浏览器以在该字段中发送他们想要的任何内容。因此,不应该依赖它进行身份验证,除非您还考虑到即使是合法用户也可能将其留空或在其中添加任意字符串。
答案 1 :(得分:1)
更可靠(尽管更复杂)这样做的方法是生成一个随机哈希来附加到文件的这个特定负载 - 但这只有在原始页面也启用了php时才会起作用(不仅仅是静态的) HTML)。
如果你想这样做,你可以这样做:
<?
// index.php or wherever you want to detect the source from
session_start();
$uniqid = uniqid();
$_SESSION["image_caller_$uniqid"] = $_SERVER['SCRIPT_FILENAME'];
echo "<img src='image.php?uniqid=$uniqid' />";
?>
然后在你的图片文件中
<?
// image.php
session_start();
$source = $_SESSION["image_caller_{$_GET['uniqid']}"];
unset($_SESSION["image_caller_{$_GET['uniqid']}"]); // Don't needlessly waste memory
// Render the image or whatever you want here
?>
这与其他类似<img src='image.php?ref=index.html'>
之类的建议有类似的效果,但这更难以欺骗。
答案 2 :(得分:0)
如果用户使用的是发送引荐来源标头的浏览器,则可以使用
进行访问$_SERVER['HTTP_REFERER']
但它依赖于客户值得信赖,你不能指望。
如果您需要独立于浏览器的方法,可以在链接中添加GET参数
<img src="image.php?ref=index.html">
并使用$ _REQUEST ['ref']访问,但同样,它可以被欺骗。
答案 3 :(得分:-2)
只有当您愿意相信$ _SERVER中的一些非常不可靠的数据时才会这样做。