我有一个名为image.php
的文件和一个名为index.html
的文件。PHP图像文件呼叫发起
此代码是index.html
<img src="image.php">
现在,是有可能的image.php
文件就知道它是由index.html
文件叫什么名字?
如果是这样,怎么样?
我有一个名为image.php
的文件和一个名为index.html
的文件。PHP图像文件呼叫发起
此代码是index.html
<img src="image.php">
现在,是有可能的image.php
文件就知道它是由index.html
文件叫什么名字?
如果是这样,怎么样?
只有当您愿意信任$ _SERVER中的某些非常不可靠的数据时。
如果用户使用发送来源标题的浏览器,你可以用
$_SERVER['HTTP_REFERER']
访问它,但它依赖于客户端上是值得信赖的,你不能指望。
如果你想有一个独立于浏览器的方法,可以在GET参数添加到您的链接
<img src="image.php?ref=index.html">
和访问与_REQUEST $ [“参考”],但再次,它可能会被欺骗。
浏览器通常会为图像请求发送一个“Referer”(原文如此)标题,其中包含包含图像链接的页面的URL。
这是可以使用$_SERVER['HTTP_REFERER']
变量访问(注意不寻常的拼写)。
请注意,该变量并不总是准确的;用户可以选择通过不发送引用者头部来保护他们的隐私(使用某种隐秘的隐私工具),他们甚至可以修改他们的浏览器以便在这个领域发送任何他们想要的东西。因此,不应该依赖于身份验证,除非您还考虑到即使是合法用户可能已将其留空或将任意字符串置于其中。
我想说什么,但更好! +1 – alex 2010-07-06 01:14:29
这样做更可靠(尽管更复杂)的方式是生成一个随机哈希以附加到该文件的特定负载 - 但这只有在原始页面也启用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'>
,但是这更难以欺骗。
-1还有其他解决方案,其他每个人都发布了关于$ _SERVER的解决方案,至少有礼貌来解释如何真正做到这一点。 – 2010-07-06 01:20:45
我没有解释,因为我拒绝鼓励不好的做法。你称它为礼貌,我把它称为一个不好的主意。 – Kalium 2010-07-06 01:30:37
但你不知道他是如何使用它。这可能是一个与安全无关的用法(例如,加载不同的语言徽标或某种美学改进),在那里没有人会试图欺骗他们的引用标题,并且99%的情况。 – 2010-07-06 02:13:12