我有一个名为test.php
的PHP页面,我将其链接到名为image.php
的动态图像,如下所示:
echo "<img src=\"image.php?ID=abc&X=123\" align=\"absmiddle\" style=\"margin:5px;\"><br>";
图像文件将ID
和X
作为GET参数,并将其用于include
来自我服务器的现有静态图像。发送标头告诉服务器将文件解释为jpeg。
我希望通过访问http://mydomain.com/image.php?ID=/abc&X=123
来阻止用户提取图像,同时允许在test.php
和我服务器上的其他页面中查看该图像。我该如何做到这一点?
到目前为止,我尝试了多种.htaccess
mod和重写,其中与我的关注点最相关的是the one shown on this page。没有任何效果;请帮忙!
答案 0 :(得分:2)
这是不可能的,因为您的浏览器显示图片的方式是直接访问。
关于分析HTTP_REFERER
会有很多建议,但这将是一个错误的决定,因为这个标题是可选的,在某些情况下它可以被防火墙,防病毒,代理等切断。 / p>
答案 1 :(得分:0)
I)使用会话:
test.php的:
<?php
session_start();
//....
$_SESSION["allow_images"]="yes";
echo "<img src=\"image.php?ID=abc&X=123\" align=\"absmiddle\" style=\"margin:5px;\"><br>";
?>
image.php:
<?php
session_start();
if(isset($_SESSION["allow_images"]) {
// render image
unset($_SESSION["allow_images"]);
} else {
// throw error/ show dummy image /etc
}
?>
II)第二种解决方案(非万无一失):
内部image.php
$ref=$_SERVER["HTTP_REFERER"];
if($ref == "http://yoursite.com/path/test.php") {
// get image parameters and render image
} else {
// throw error or maybe render a dummy image with just few bytes
};
请注意,HTTP_REFERER很容易被欺骗。
早期错误的解决方案:
在test.php中使用变量
$allow_image="yes";
echo "<img src=\"image.php?ID=abc&X=123\" align=\"absmiddle\" style=\"margin:5px;\"><br>";
在渲染之前测试image.php中的isset($ allow_images)。只有当roman.php被包含在romanusfatuus中时才会有效。