首页 文章

(htaccess)如何防止DIRECT URL访问文件?

提问于
浏览
57

这是我对同一问题的第二篇文章 . 因为上一篇文章需要更多的例子 .

好吧再说一遍,我正在使用Apache,我有一个示例Web文件夹(在我的Localhost上),如:

在该文件夹中,文件将是:

  • index.html

  • sample.jpg

  • .htaccess

“index.html”将简单地包括:

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

当我在 http://localhost/test/ 运行网站时,会在页面上显示图像`sample.jpg' .

THEN THE PROBLEM HERE IS

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

注意:
在获得以下答案的一天后,我发现所有解决方案在逻辑上都有效,但是Firefox有问题 . 我的意思是,下面的答案是在每个浏览器上测试时提供解决方案,但不是在Firefox上测试 .

4 回答

  • 22

    请尝试以下方法:

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

    如果直接访问图像,则返回403,但允许它们在现场显示 .

    Note: 当您打开带有图像的某个页面然后复制该图像's path into the address bar you can see that image, it is only because of the browser's缓存时,实际上该图像尚未从服务器加载(来自Davo,下面的完整评论) .

  • 7

    罗西波夫的规则很有效!

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

    因此,采用rosipov规则将任何直接请求重定向到{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]
    

    我认为这是一种礼貌的方式,不允许直接访问,例如,像xml,javascript这样的CMS敏感文件......考虑到安全性:对于现在所有这些机器人潦草的网页,我想知道他们的算法是什么来自我的'messageforcurious' .

  • 7

    根据您的评论看起来这就是您所需要的:

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

    我已经在我的localhost上测试了它,它似乎工作正常 .

  • 94

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

相关问题