【问题标题】:How to restrict access to a file or files using .htaccess?如何使用 .htaccess 限制对一个或多个文件的访问?
【发布时间】:2012-09-20 17:17:26
【问题描述】:

我想使用 .htaccess 文件限制对一个或多个文件的访问。基本上,没有人应该能够使用文件的直接链接来下载文件。但是,应该可以从我的网站访问该文件。

例如,假设我有一个名为 Presentation.ppt 的文件。我希望访问者可以通过我的网站访问它,但如果他们尝试下载它或使用直接链接访问它,那么服务器应该拒绝该请求。

是否可以使用 .htaccess 来做到这一点?

提前谢谢你,

【问题讨论】:

  • 当您说“通过我的网站”时,您的确切意思是什么?您的网站是否使用特殊形式的心灵感应而不是 URL 来访问文件?
  • @LiorCohen,不,先生。我的意思是这个文件只能通过我的网页或 HTML 文件访问,而不是通过调用其直接链接 URL。

标签: file .htaccess webserver


【解决方案1】:

当 HTTP_REFERER 不正确时,最简单的(虽然不是防弹的)是重定向用户代理。这可以在服务器配置中使用 mod_rewrite 或(第二选择)在 .htaccess 类文件中完成。它有助于防止简单的热链接(通过 url 引用您的文件的链接)。

您应该阅读 moapaches d_rewrite 的详细文档。

【讨论】:

    【解决方案2】:

    您可以拒绝对每个 IPA 的目录的访问,但服务器的:

    <Directory /dir/of/presentation>
        Order Allow,Deny
        Allow from 127.0.0.1
        Deny from All
    </Directory>
    

    正如你所指出的那样,这很正常。

    如何将 Mod Rewrite 与将 /dir/of/presentation/* 映射到禁止页面的规则一起使用。这样直接链接就不行了。请求http://site/content/presentation.ppt
    可以重定向到http://site/forbidden.html

    在内部,您可以将http://authorizedRequest/presentation.ppt 的链接映射到http://site/content/presentation.ppt

    这只是通过默默无闻的安全性。它不会阻止任何人直接在他们的浏览器中输入你的“秘密”URI。

    【讨论】:

    • 那么“访问者”(合法的)如何访问文件?
    • 仔细阅读您的问题后,我发现我的解决方案不起作用。只有当他们单击您网站上的链接时,您才希望文件可以通过其 URI 直接访问。我知道没有安全的方法可以做到这一点。
    • @nunzabar,我明白了。你是对的,似乎没有直接的方法可以做到这一点。我记得访问某些网站,您可以在他们的网站(网页)上查看他们的图像,但如果您尝试通过调用其直接 URL 来访问图像本身,它会将您重定向到禁止的.html 或页面。这就是我想要实现的目标。
    【解决方案3】:

    例如,假设我有一个名为 Presentation.ppt 的文件。我希望访问者可以通过我的网站访问它,但如果他们尝试下载它或使用直接链接访问它,那么服务器应该拒绝该请求。

    是否可以使用 .htaccess 来做到这一点?

    这是可能的,但有办法绕过它。您需要检查浏览器发送的referer,但任何人都可以欺骗,有时浏览器可能会选择不包含referer。

    如果您尝试保护文件Presentation.ppt,请将这些规则放在文档根目录的 htaccess 文件中:

    RewriteEngine On
    RewriteCond %{HTTP_REFERER} !^(https?://)?your_website.com
    RewriteRule ^/?path/to/Presentation.ppt - [L,F]
    

    如果你想保护一个文件夹/path/images/ 那么:

    RewriteEngine On
    RewriteCond %{HTTP_REFERER} !^(https?://)?your_website.com
    RewriteRule ^/?path/images - [L,F]
    

    【讨论】:

      【解决方案4】:

      谢谢大家的回答。我已经尝试了您的所有建议,但仍然无法正常工作。不过,我确实想出了一个可行的解决方案。

      第 1 步:禁用或关闭您的网络服务器上的 Option Indexes,方法是删除索引一词,让其他一切保持不变。在某些情况下,您可以使用 .htaccess 文件来执行此操作。如果您无法使用 .htaccess 执行此操作,则必须在服务器中查找 httpd.conf 文件。它通常位于 etc/apache/httpd.conf 或 etc/httpd/conf/httpd.conf。找到后,在其中关闭此选项。

      第 2 步: 在您的网页文件夹中创建一个文件夹,然后随意命名,但要确保它不容易被猜到或很明显(即 Joe33CompanyOCT2MeBoss)。然后,将您想要隐藏或保护访问者的文件移动到此文件夹中。

      第 3 步:在 robots.txt 文件中,通过输入“禁止您的文件夹名称”,禁止所有机器人或爬虫为您的文件夹或该文件夹中的文件编制索引。

      第 4 步: 然后您必须使用下面类似的代码创建一个 PHP 文件。下面的代码将强制下载。

              $File1 = 'http://yourwebsite.com/Joe33CompanyOCT2MeBoss/Presentation.ppt';
              header("Content-Disposition: attachment; filename=\"".basename($File1)."\"");
              header("Content-Type: application/force-download");
              ob_end_clean();
              flush();
              readfile($File1);
              exit;
      

      这种方式文件的直接路径对您的访问者隐藏,即使他们可以直接下载文件,他们也根本不知道文件的实际 URL,因为强制下载 php 代码不会显示实际路径文件。所以,现在我网站的访问者必须通过我的网页而不是直接下载这个文件。

      以下 stackoverflow 问题对帮助我解决编程问题非常有帮助。谢谢,

      How to Automatically Start a Download in PHP?

      php file force download

      【讨论】:

        猜你喜欢
        • 2012-03-03
        • 2011-04-05
        • 2010-12-07
        • 1970-01-01
        • 2018-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多