无法从 html apache2 中受密码保护的目录中访问另一个文件?



在Apache2中,我创建了一个经过身份验证的文件夹,在我的配置文件中使用以下条目正确创建:

<Directory "/var/www/html/private">
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Directory>

目前,当我试图通过网络浏览器导航到我知道在受保护文件夹中的文件时,我会得到输入用户名和密码的提示,这就是我想要的。然而,当我转到我网站上的任何HTML文件(例如直接在我的HTML文件夹或另一个目录中的文件(,引用该私人文件夹中包含的javascript时,它还会提示我输入用户名和密码,这不是我想要的。我该怎么解决这个问题?

我已经更新了我的答案,因为这不是通过基本身份验证实现的。

基本身份验证通常适用于像HTML文件这样的正面页面,不会对外部资产起作用。

为了解决外部资产文件夹,您需要用您选择的编程语言(如Python、PHP或NodeJS(执行类似操作。

  1. 要求用户登录,他们可以选择登录或拒绝登录
  2. 如果用户已经登录,请根据您使用的后端语言检查登录令牌。如果登录令牌有效,则返回JS文件。例如:

假设我们请求/my/js-file.js;我们可以用这个名称创建一个URL,而不是公开JS文件本身。如果用户已登录,则通过该URL返回JS文件内容。否则,返回"无效令牌",而不是JS文件内容。

Stackoverflow上有许多资产可以帮助您创建它。搜索"如何使用身份验证保护JS文件"。

我假设您没有使用服务器端应用程序,因为这样您就可以验证流程用户进入该私有文件夹的身份。

在您当前的设置中,这是预期的行为。您正在从受保护的文件夹中请求文件。htaccess保护HTTP浏览器请求。从安全文件夹请求js(甚至图像(是通过HTTP请求实现的,即使它是在公共端的HTML中完成的。

最简单的方法是把js文件放在公共文件夹中,但我有一种感觉,你想让js保持私有/不可见。不幸的是JS不是这样工作的。无论它是否源于安全文件夹,一旦加载到浏览器中,任何人都可以查看js。

如果有代码要保持模糊/不可访问,则必须使用服务器端代码。所有进入浏览器的JS(为了简单起见(对任何人都是可见的。

为了解决这个问题,我决定保留我所拥有的,但我将私有目录作为存放受密码保护的HTML文件的文件夹,正如我在上一篇文章中所讨论的那样。然后,我删除了负责请求密码的javascript文件,代之以Apache的身份验证。这样,每当我想访问这个特定的网页时,它只需要求提供用户名和密码,就不需要自定义的javascript函数来处理这个问题。此外,我创建的任何其他网页,如果我想通过某种身份验证进行保护,我可以将其放在我的私人文件夹中。

最新更新