【问题标题】:Redirect from file based on referrer using JavaScript使用 JavaScript 基于引用者从文件重定向
【发布时间】:2017-02-23 07:29:32
【问题描述】:

这个问题的版本已经发布了很多次,但到目前为止我在这个网站上找到的解决方案都没有奏效。我正在尝试从 文件 重定向,而不是网页。我实际上需要知道这是否可能,因为我了解到 PHP 无法做到这一点。这是我之前提出的问题的答案:

Web 服务器将首先检查它是否存在,如果存在,它将立即提供该文件。它不经过任何 PHP 代码。因此,您不能编写任何 PHP 代码来拦截该请求并阻止它。

我们网站上有一个路径为/downloads/ 的文件夹,其中包含我们不希望任何人下载的文件。

我想在我们的主 JavaScript 文件中放置一个脚本,上面写着:

  • 如果文件是/downloads/
  • 如果用户来自推荐人allowed_domain.com,则允许访问/downloads/ 中的文件
  • 否则重定向到首页或404

我的尝试(没有成功)

if (top.location.pathname === '/downloads/private.zip') {
  if (document.referrer !== "http://www.allowed_domain.com") {
    document.location.path = "/downloads/private.zip";
  }
  else {
  document.location.path = "/404";
  }
}

约束

不能使用 .htaccess。我们的托管服务提供商运行的是 Nginx,而不是 Apache。我尝试过使用 Nginx 配置代码,但我必须将其发送给他们实施,但它不起作用,他们不会帮助我。

是的,我知道这是一个超级、超级不安全的限制访问解决方案。我的公司正在研究一个更正式的解决方案,但在那之前,我需要实施一些临时措施来阻止那些缺乏计算机知识或没有动力绕过重定向的用户,这几乎是我最后的选择。

【问题讨论】:

  • 谁告诉你引用的声明?这是完全错误的,当然您可以配置您的 Web 服务器以使用 PHP 而不是直接提供文件。您需要在服务器端执行此操作,文档下载不涉及客户端 JavaScript。
  • @Bergi 您是在谈论将文件放在public_html 之外并通过PHP 传递吗?因为我很想这样做,但我的托管服务提供商不支持它。
  • 是的,类似的东西,但是我很难相信 nginx 不会支持这个(除非它是您的托管商对您的付款类别施加的任意限制)
  • @JesseRogers 你能更改目录名称或移动文件吗?如果是这样,让 PHP 通过 index.php?file=myfile.zip 传递这些文件,同时永远不要泄露目录。
  • @Bergi 我不认为是 Nginx 不支持它,而是托管我网站的网络服务器的公司不允许它。

标签: javascript redirect


【解决方案1】:

这个问题在 JavaScript 中是无法解决的,即使是在您提出的非常有限且不安全的方式中也是如此。问题是对/downloads/private.zip 的请求直接返回该文件的内容——它不加载任何 HTML 页面,因此浏览器永远不会看到或执行该 JavaScript 代码。

解决这个问题的一种方法是有一个 PHP 文件来处理对该目录的任何请求,检查用户是否有权查看这些文件,然后返回请求的文件或 404。但为此你需要一些形式的配置,你已经告诉我们你也不能这样做。

第三种解决方案,一个非常愚蠢但在这种非常受限的情况下可以工作(对于不精通的用户)的解决方案是用 JavaScript 的 sn-p 替换所有链接被禁止的资源将用户定向到文件或 404 页面。但是,从您的问题来看,您似乎很可能试图阻止来自您无法控制的网站的用户访问,在这种情况下,这也不起作用。

底线:如果您没有能力配置您的网络服务器,这不是一个可以解决的问题。

【讨论】:

    猜你喜欢
    • 2010-11-09
    • 2013-11-26
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多