【问题标题】:htaccess to deny access to files except when accessed from a specific subfolder on serverhtaccess 拒绝访问文件,除非从服务器上的特定子文件夹访问
【发布时间】:2013-09-25 19:22:59
【问题描述】:

我的网络共享根目录中有一个文件夹,其中包含半机密的 pdf 文档。我希望任何访问该文件夹或其文件的人都会收到权限错误。这很容易设置,我可以使用它

<FilesMatch "\.pdf$">
 Order Allow,Deny
 Deny from all
</FilesMatch>

但是,我希望服务器上包含 PHP 脚本的子文件夹能够链接到这些 PDF 文件。笔记;我不希望 php 能够在服务器内部读取文件,但是对于直接链接这些受限文件的 http 请求来说突然成为可能。

我读到子文件夹中的 htaccess 文件可以推翻在根文件夹 htaccess 文件中设置的文件夹路径更高的规则。为此,我在特定子文件夹中设置了一个带有 php 脚本的 htaccess 文件(使用 all 中的允许),但它似乎不起作用。

【问题讨论】:

    标签: apache .htaccess security mod-rewrite


    【解决方案1】:

    如果您在 /secret/ 文件夹中有 pdf 文件,并且该文件夹中有一个 htaccess 文件,则该文件将在任何时候访问该 pdf 文件时进行评估,无论谁在访问它或从何处访问它。就网络服务器和 htaccess 文件中的内容而言,唯一的区别是可以区分从谷歌结果列表访问该 PDF 的人与您设置的页面碰巧链接到他们的页面是引用者。

    从谷歌,引荐将看起来像:https://www.google.com/search?q=secret+pdf(或其他)

    在您设置的页面中,引荐来源网址将类似于您设置的页面的 URL。就是这样,没有其他区别。这意味着您可以与引用者进行匹配,以查看是否有人从谷歌或您的页面点击了您的 PDF 链接。问题是任何人都可以使引用者成为他们想要的任何东西。它可以完全伪造成任何东西,所以如果这是为了防止未经授权的访问,HTTP 引用只是更糟糕的方法。

    RewriteEngine On
    RewriteCond %{HTTP_REFERER} !^http://www.yourdomain.com/your_page.html
    RewriteRule \.pdf$ - [L,F]
    

    您的 pdf 目录中的 htaccess 文件中的这些规则将阻止来自其他任何地方的链接:http://www.yourdomain.com/your_page.html,除非引用者是伪造的。

    【讨论】:

    • 请记住,欺骗 HTTP Referer 是可能的,see this question
    • 嗨乔恩·林。感谢您的答复。确认;使用引用代码绝对是我可以检测到文件访问的唯一方法?
    • @AdamJones 唯一的方法来告诉某人从哪里点击了链接,访问文件就是访问文件,引用者告诉你从哪里访问它
    猜你喜欢
    • 2011-05-11
    • 1970-01-01
    • 2013-10-07
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多