【问题标题】:How to prevent a file from direct URL Access?如何防止文件直接 URL 访问?
【发布时间】:2012-05-01 11:27:45
【问题描述】:

我正在使用 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”。


问题:

  • 我想防止图片直接在网址栏中显示为http://localhost/test/sample.jpg。

注意: 我发现以下解决方案在Firefox 除外的所有浏览器上测试时都有效。

【问题讨论】:

    标签: regex apache .htaccess mod-rewrite hotlinking


    【解决方案1】:

    尝试以下方法:

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

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

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

    【讨论】:

      【解决方案2】:

      rosipov 的规则很有效!

      我在实时站点上使用它来显示空白或特殊消息;)代替对文件的直接访问尝试,我宁愿保护一点不被直接查看。我认为这比 403 Forbidden 更有趣。

      因此采用 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...),同时考虑到安全性:对于现在在网上乱涂乱画的所有这些机器人,我想知道他们的算法会从我的 'messageforcurious' 中得到什么。

      【讨论】:

        【解决方案3】:

        根据您的 cmets 看起来这是您需要的:

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

        我已经在我的本地主机上对其进行了测试,它似乎工作正常。

        【讨论】:

          【解决方案4】:

          首先,找到主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)。而已!

          【讨论】:

            【解决方案5】:

            对我来说,这是唯一起作用的东西,而且效果很好:

            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/

            【讨论】:

              【解决方案6】:

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

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

              【讨论】:

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

                【讨论】:

                  猜你喜欢
                  • 2016-03-04
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-06-28
                  • 2023-02-16
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多