阻止直接访问动态PHP图像

时间:2010-11-18 03:37:19

标签: php html image apache .htaccess

我有一个名为test.php的PHP页面,我将其链接到名为image.php的动态图像,如下所示:

echo "<img src=\"image.php?ID=abc&X=123\" align=\"absmiddle\" style=\"margin:5px;\"><br>";

图像文件将IDX作为GET参数,并将其用于include来自我服务器的现有静态图像。发送标头告诉服务器将文件解释为jpeg。

我希望通过访问http://mydomain.com/image.php?ID=/abc&X=123来阻止用户提取图像,同时允许在test.php和我服务器上的其他页面中查看该图像。我该如何做到这一点?

到目前为止,我尝试了多种.htaccess mod和重写,其中与我的关注点最相关的是the one shown on this page。没有任何效果;请帮忙!

2 个答案:

答案 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中时才会有效。