防止直接在浏览器中打开图像

时间:2011-07-24 20:11:19

标签: html image hotlinking

我有一个带有图片的文件夹1.jpg,2.jpg,3.jpg ...有没有办法阻止用户直接在浏览器中输入www.example.com/pictures/3.jpg等URL加载那张图片?

如果web html调用它(< img href = ...),则应加载图像。

这可能吗?使用IIS URL重写或其他一些技术?

我正在使用IIS7.5。我的目标是阻止用户看到下一个图像...我知道,我可以编码名称,但我有一些旧的数据库,从1-1000,我想以某种方式,以防止只是用户不使用网址浏览没有引用者...因为我每天都在服务一张照片而且我不希望他们找到其余的照片......

这可能吗?

1 个答案:

答案 0 :(得分:1)

您可以依靠HTTP_REFERRER尝试使用网址重写,但这并不总是准确的,并且可能会阻止某些浏览器上的用户查看您网站上的图片。

如果我是你,我会将你的所有图片移到你的网页目录之外(或者最好只是阻止pictures文件夹),然后构建一个像这样的php脚本:image.php:

<?php

define('NUM_IMAGES', 1000);

header('Content-Type: image/png');

$image = imagecreatefromjpeg('pictures/'.((int)(time()/86400)%NUM_IMAGES+1).'.jpg');
imagepng($image);

?>

上面的脚本会将图像输出到用户浏览器,该浏览器将按顺序每天更改一次到下一个图像,您可以像以下一样使用它:<img src="image.php" />

然后,由于您的图像文件夹被阻止,没有人可以看到任何其他图像。然后仍然可以直接请求image.php,但他们只能看到当天的图像。

如果您不想每天自动旋转一次,并希望手动控制它显示的图像,您也可以将'.((int)(time()/86400)%1000+1).'替换为您要显示的图像编号。

如果您确实希望它自动旋转,但想要控制更新时间,则可以向time()添加偏移量,例如:((time()+$offset)/86400)