5

我们目前正在使用 webroot 中的文件夹来存储我们在需要登录的视图中加载的图像和视频(使用通常的 html 图像助手)。

我怎样才能防止外部访问者只是做一个site.com/img/photos/1.jpgurl 并访问图像?据我了解,我不能真正使用媒体视图在正确的视图中渲染图像,而且我不知道是否有通过 htaccess 操作的解决方案。

这方面的最佳做法是什么?也许选择使用非 webroot 文件夹是最好的(尽管这会使文件存储部分变得更加困难)?

正如poncha建议的那样,我尝试将主 .htaccess 文件编辑到这个

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteCond %{HTTP_REFERER} !localhost
   RewriteCond %{REQUEST_URI} ^app/webroot/img/
   RewriteRule .* / [L,F]
   RewriteRule    ^$ app/webroot/    [L]
   RewriteRule    (.*) app/webroot/$1 [L] 
</IfModule>

但是重写基线似乎禁止访问整个站点,没有它,img 访问似乎没有任何变化。

编辑 2:在 webroot 中编辑 htaccess:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php [QSA,L]

# this RewriteCond is needed to avoid rewrite loops
RewriteCond %{REQUEST_URI} !^/app/webroot/
RewriteRule (.*) app/webroot/$1 [L,R]


RewriteCond %{HTTP_REFERER} !127.0.0.1
RewriteCond %{REQUEST_URI} ^/app/webroot/img/
RewriteRule .* - [L,F]

</IfModule>
4

1 回答 1

2

这将检查Refererhttp 标头是否设置为包含您的域的内容,如果没有,则拒绝访问 img/ 文件夹。

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_REFERER} !site.com
RewriteCond %{REQUEST_URI} ^img/
RewriteRule .* / [L,F]

注意:如果有人想窃取您的内容,“破坏”这种保护很容易,但是,它确实可以防止盗链,而无需生成某种脚本,该脚本将通过所有图像/视频来检查是否应该访问的确。

编辑:

如果您的网站不在 中/,您有两种选择:

  1. 更改RewriteBase以反映站点的基本 uri(例如RewriteBase /app/webroot/

  2. 更改RewriteCond以反映来自/(例如RewriteCond ^app/webroot/img/)的路径

在您的情况下,第二个选项是首选,因为您有其他规则

编辑2:

在您的情况下,整个集合应如下所示:

RewriteEngine on
RewriteBase /

# this RewriteCond is needed to avoid rewrite loops
RewriteCond %{REQUEST_URI} !^/app/webroot/
RewriteRule (.*) app/webroot/$1 [L,R]

RewriteCond %{HTTP_REFERER} !localhost
RewriteCond %{REQUEST_URI} ^/app/webroot/img/
RewriteRule .* - [L,F]
于 2012-06-26T11:44:18.030 回答