【问题标题】:restricting access to zip files from other domains with htaccess使用 htaccess 限制对来自其他域的 zip 文件的访问
【发布时间】:2014-03-24 09:17:15
【问题描述】:

我正在运行一个网站,该网站在一个文件夹中包含多个 zip 文件。

我希望人们能够从网站上的下载链接(将在登录后)访问这些内容,但我想确保无法通过键入 zip 的 URL 来下载它们直接文件。

所以我认为这需要使用 htaccess 来完成 - 以及某种拒绝所有规则,但我的域除外。这是正确的吗?

现在,我的文件包含以下内容(我的实际域已替换为“域”):

SetEnvIfNoCase Referer "^http://domain.com/" locally_linked=1
SetEnvIfNoCase Referer "^http://domain.com$" locally_linked=1
SetEnvIfNoCase Referer "^http://domain.com/" locally_linked=1
SetEnvIfNoCase Referer "^http://domain.com$" locally_linked=1
SetEnvIfNoCase Referer "^$" locally_linked=1
<FilesMatch "\.(zip)$">
  Order Allow,Deny
  Allow from env=locally_linked
</FilesMatch>

谁能解释为什么这可能不起作用?

我在共享主机 (Dreamhost) 上:/ - 但我认为这并没有太大区别。

谢谢。

【问题讨论】:

    标签: php apache .htaccess security


    【解决方案1】:

    我有类似的东西,但使用 mod_rewrite 并使用此代码

    RewriteEngine on
    RewriteCond %{HTTP_REFERER} !^$
    RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain.com [NC]
    RewriteRule \.(zip)$ - [NC,F,L]
    

    【讨论】:

    • 这似乎阻止了人们链接到文件 - 太好了,谢谢。但是,它不会阻止我在浏览器中输入直接 URL - 有没有办法解决这个问题? (例如有人猜测文件名)
    • 此代码验证引用者,因此如果引用者不是来自您的域,则即使您输入直接 url,也不会下载文件
    • 太棒了!谢谢你。当我尝试时它似乎对我不起作用,但很高兴听到:)
    【解决方案2】:

    您可以使用标题来执行此操作:

    // set example variables
    $filename = "file_to_download.zip";
    $filepath = "/var/www/domain/path_to_download/";
    
    // http headers for zip downloads
    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: public");
    header("Content-Description: File Transfer");
    header("Content-type: application/octet-stream");
    header("Content-Disposition: attachment; filename=\"".$filename."\"");
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".filesize($filepath.$filename));
    ob_end_flush();
    @readfile($filepath.$filename);
    

    在此示例中,您可以添加更多登录信息,例如用户登录。

    【讨论】:

    • 这会进入 htaccess 文件吗?
    • 不,它不是 htaccess。它是 PHP 的代码。我知道您需要 htaccess 中的解决方案,但也许这个解决方案更好。
    • 啊,好吧 - 有用,但不是我在这种情况下所追求的。反正坦克你:)
    • 这段代码的问题是你需要将它插入到所有使用下载的地方,如果你把它放在.htaccess上你不需要在你的php代码中放置任何代码
    • 你可以使用include或者require函数。
    【解决方案3】:

    你想要做的是阻止hotlinking。你不能真的阻止它发生,但你可以拒绝来自其他推荐人的下载。

    将以下内容添加到您的 .htaccess 文件中,将 example.com 替换为您的域。 如果您想保护其他文件格式,请将它们添加到 zip 中,例如 (zip|rar)

    RewriteEngine on
    RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)example.com/.*$ [NC]
    RewriteRule \.(zip)$ - [F]
    

    如果您想提供替代内容(例如一个说您必须先登录的页面),请使用:

    RewriteEngine on
    RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)example.com/.*$ [NC]
    RewriteRule \.(gif|jpg)$ http(s)?://www.example.com/alternate.html [R,L]
    

    【讨论】:

    • 非常有用,谢谢。有没有办法修改/编辑它以阻止人们也猜测 zip 文件的 URL 并直接将其输入到他们的浏览器栏中以启动下载?
    • 这也将阻止直接访问。这将允许访问 zip 文件的唯一方法是,如果它们的引荐来源标头包含您的域。只有在点击您网站中的链接时才会发生这种情况(通常)。
    • 由于我公司的防火墙,我无法访问该文件,请使用我的答案中的代码重试。根据这个问题,它应该可以工作:stackoverflow.com/questions/10236717/…
    猜你喜欢
    • 1970-01-01
    • 2012-03-03
    • 2015-10-07
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-13
    相关资源
    最近更新 更多