我试图阻止访问我的服务器上的图像,如果他们从一些常见的“坏人”链接,即网站的用户倾向于使用其他人的带宽:
有两件事把我的问题和其他问题区分开来,比如这个问题和这个问题 :
我试图在apache.conf中包含RewriteRules,但是它根本没有做任何事情。 而且似乎没有一个选项允许我根据SetEnvredirect。
有什么build议么?
我有一个解决scheme,即使它不是很漂亮,因为它留下了默认错误403文档更改,即使图像没有被盗链:
这进入apache2.conf:
SetEnvIfNoCase Referer "livejournal.com" hotlink <FilesMatch ".(gif|jpg|jpeg|png)$"> ErrorDocument 403 /server404/no_hotlink.php </FilesMatch> <FilesMatch ".(gif|jpg|jpeg|png|mpg|avi|flv)$"> deny from env=hotlink </FilesMatch> Alias /server404 "/var/www/_404" <Directory "/var/www/_404"> AllowOverride AuthConfig Order allow,deny Allow from all </Directory>
一段时间以来,我们在/ server404path中使用了服务器级的404错误文档,所以我们已经有了这个。 你也可以把它叫做403或者GlobalNoHotlink或者任何你想要的。
对于图像(第一个FilesMatch),我们在/ server404目录中设置“禁止”ErrorDocument到PHP文件。 然后我们检查它是否是热链接的(我们也为video文件做了这样的事情,因此有两个FilesMatch标签),如果被盗链的话,禁止访问。
这进入/var/www/_404/no_hotlink.php – 在禁止的图像上调用的PHP文件:
<?PHP $file = dirname(__FILE__) . '/_default/no_hotlink.png'; header('HTTP/1.1 200 OK', true, 200); header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: " . gmdate("D, d MYH:i:s") . " GMT"); header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no-cache"); header('Content-length: ' . filesize($file)); header('Content-type: image/png'); readfile($file); ?>
它的工作 – 但它不是我想要的那样美丽,所以仍然会对其他解决scheme感到高兴。
在我的httpd.conf中有这样的东西:
RewriteCond "%{HTTP_REFERER}" !="" RewriteCond "%{HTTP_REFERER}" "!^http://www.mydomain.com/.*$" [NC] RewriteRule "\.(jpg|png)$ - [F]
如果您之前没有使用RewriteConds和RewriteRules,您可能也需要使用它:
RewriteEngine On
我发现它在谷歌或Apache的食谱。 不记得了。
唯一有效的方法是使用mod重写规则。 如果引荐来源不是来自您自己的域名,那么将图片url重写为不存在的地方,或其他地方,或者1px x 1px的透明gif。
很多人用这样的图像来做这个事情:“没有偷菜,伙计”或类似的东西
引用者检查不总是工作,一些代理甚至浏览器从http请求中删除HTTP_REFERER头。
在你的内容生成代码中检查一些cookie好得多(比如index.php会生成图片库),如果cookie设置为期望值,检查mod-rewrite或者apache2级别。
看这里或这里 。