1

我有这个用户目录,其中包含我所有用户的个人资料图片。当我使用图像标签时,它指向该用户目录。如果有人想使用直接链接访问该图像,他们可以。我想阻止他们直接访问图像。我可以使用 yii 中的资产管理器来实现这一点,或者我需要的是完全不同的东西吗?

4

2 回答 2

1

应该这样做,甚至允许没有 HTPP_REFERER 的访问者:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourotherdomain.com [NC]
RewriteRule ^path/to/user/(.+)?(jpg|jpeg|gif|png|tiff)$ http://yourdomain.com/do_not_hot_link.png [NC, R, L]

只需将 yourdomain.com 替换为您的域,将最后一个 url 替换为“禁止”页面(请求正在重定向到此!)

于 2013-06-08T19:17:08.263 回答
0

有很多方法可以实现它。并且不确定 Yii 中是否有一些内置功能。

在 .htaccess 文件中有一些简单的方法可以做到这一点。

第一种方法检查 HTTP_REFERER 如果它没有太多你的域显示 403 Forbidden 页面:

RewriteEngine  on   

RewriteBase  /

RewriteCond %{HTTP_REFERER} !your_domain
RewriteRule ^images - [F,L]

其中your_domain实际上是您的域名,并且images是用户个人资料图像文件夹。

这有一些缺点,例如 HTTP_REFERER 可能不会被某些客户端发送或被代理服务器或防火墙切断。

另一种方法是在您的应用程序中设置一些 cookie,然后在 .htaccess 中检查它:

setcookie("show_img", 1, time()+3600, "/");

接着

RewriteEngine  on   

RewriteBase  /

RewriteCond %{HTTP_COOKIE} !show_img=([^;]+) [NC]
RewriteRule ^images - [F,L]

这种方法实际上不会阻止您的访问者使用直接链接查看它。但这肯定会给想要从您的服务器插入图像的网站管理员带来很多麻烦。

于 2013-06-08T19:02:33.060 回答