我想阻止其他用户直接在我的Yii应用程序中访问图像。

时间:2013-06-08 17:58:56

标签: php security .htaccess yii

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

2 个答案:

答案 0 :(得分: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替换为您的域名,将最后一个网址替换为“禁止访问”页面(请求将重定向到此页面!)

答案 1 :(得分: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]

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