.htaccess 如何防止文件直接URL访问?

k7fdbhmy  于 2023-04-21  发布在  其他
关注(0)|答案(7)|浏览(157)

我使用的是Apache,我的本地主机上有一个示例Web文件夹,如下所示:

http://localhost/test/

test文件夹中的文件:

index.html  
     sample.jpg  
     .htaccess

index.html的示例来源:

<html>
  <body>
    <img src="sample.jpg" />
  </body>
</html>

当我在http://localhost/test/上运行网站时,它只会在页面上显示图像“sample.jpg”。

问题:

  • 我想防止直接在URL栏中显示为http://localhost/test/sample.jpg的图像。
    注意:*我发现下面的解决方案在所有浏览器上测试都有效,但Firefox除外。*
pgpifvop

pgpifvop1#

尝试以下操作:

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost [NC] 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost.*$ [NC] 
RewriteRule \.(gif|jpg)$ - [F]

返回403,如果您直接访问图像,但允许它们在网站上显示。

**注意:**当您打开一些带有图像的页面,然后将该图像的路径复制到地址栏时,您可能会看到该图像,这只是因为浏览器的缓存,实际上该图像尚未从服务器加载 (来自Davo,下面的完整评论)

u0njafvf

u0njafvf2#

rosipov的规则工作得很好!
我用它在现场显示一个空白或特殊的消息;)代替直接访问文件的尝试,我宁愿从直接视图中保护一点。我认为这比403禁止更有趣。
因此,采用rosipov的规则将任何 direct 请求重定向到{gif,jpg,js,txt}文件到'messageforcurious':

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.ltd [NC] 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.ltd.*$ [NC] 
RewriteRule \.(gif|jpg|js|txt)$ /messageforcurious [L]

我认为这是一种礼貌的方式,不允许直接访问,比如说,CMS * 敏感的文件 *,如xml,javascript......考虑到安全性:对于现在所有这些在网上涂鸦的机器人,我想知道他们的算法会从我的“好奇的消息”中得到什么。

4dbbbstv

4dbbbstv3#

根据您的评论,这似乎是您需要的:

RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost/ [NC] 
RewriteRule \.(jpe?g|gif|bmp|png)$ - [F,NC]

我在我的本地主机上测试了它,它似乎工作正常。

gmol1639

gmol16394#

首先,找到主Apache的配置文件httpd.conf的位置,如果你使用Debian,它应该在这里:/etc/apache/httpd.conf。使用一些文件编辑器(如Vim或Nano)打开此文件,并找到如下所示的行:

Options Includes Indexes FollowSymLinks MultiViews

然后删除单词索引并保存文件。该行应该看起来像这样:

Options Includes FollowSymLinks MultiViews

完成后,重启apache(例如Debian中的/etc/init.d/apache restart)。

1cklez4t

1cklez4t5#

对我来说,这是唯一有效的方法,而且效果很好:

RewriteCond %{HTTP_HOST}@@%{HTTP_REFERER} !^([^@]*)@@https?://\1/.*  
RewriteRule \.(gif|jpg|jpeg|png|tif|pdf|wav|wmv|wma|avi|mov|mp4|m4v|mp3|zip?)$ - [F]

发现它在:
https://simplefilelist.com/how-can-i-prevent-direct-url-access-to-my-files-from-outside-my-website/

eoigrqb6

eoigrqb66#

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost.*$ [NC] 
RewriteCond %{REQUEST_URI} !^http://(www\.)?localhost/(.*)\.(gif|jpg|png|jpeg|mp4)$ [NC] 
RewriteRule . - [F]
iyr7buue

iyr7buue7#

当我在我的Web服务器上使用它时,我只能重命名本地主机,像这样:

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com [NC] 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com.*$ [NC] 
RewriteRule \.(gif|jpg)$ - [F]

相关问题