3

我有一系列相互关联的网页,我想通过要求用户提供登录名和密码来限制对这些网页的访问。但是,我的托管帐户目前不提供任何服务器端脚本功能 - 有什么方法可以仅使用客户端脚本来实现此目标?

我想知道以下程序是如何工作的 -

http://www.myzips.com/software/HTML-Password.phtml

澄清:感谢您的投入。但是,如果我正在配置 Web 服务器,那么用户是否有可能输入用户名和密码?

4

10 回答 10

10

无法创建安全的客户端脚本。如果用户可以访问它,那么它是不安全的。

如果您的主机正在运行 apache,您可以使用 .htaccess 保护文件夹,在 IIS 上,您可以通过目录安全性来做同样的事情。

于 2009-01-13T13:12:52.810 回答
7

下面是一个使用加密的工作解决方案,我自己实现了。

这里的一些用户建议使用基于加密的方法来保护客户端密码。我也需要这个功能,所以我自己实现了。密码使用 PBKDF2 进行哈希处理,然后用于使用 AES256 加密页面。

该工具托管在这里:

https://www.maxlaumeister.com/pagecrypt/

此处提供源代码:

https://github.com/MaxLaumeister/pagecrypt


项目描述,来自项目页面:

PageCrypt - 密码保护 HTML

此工具可让您安全地使用密码保护 HTML 文件。与其他密码保护工具不同,此工具:

  1. 没有服务器端组件(此工具及其受密码保护的页面完全在 javascript 中运行)。

  2. 使用强加密,因此无法绕过密码保护。

您需要做的就是选择一个 HTML 文件和一个密码,您的页面将受到密码保护。

于 2015-06-23T21:15:12.850 回答
5

您可以使用以下内容创建文件 .htaccess :

AuthUserFile path/to/password.txt
AuthGroupFile /dev/null
AuthName "Acces Restreint"
AuthType Basic
<Limit GET POST>
require valid-user
</Limit>

然后您必须创建 .htpasswd 文件。

于 2009-01-13T13:17:16.793 回答
4

可以实现这一点,尽管您可能会发现简单地切换到不同的托管服务提供商会更容易。这是可能的:

首先,使用对称加密算法和随机密钥(主密钥)对整个主体进行加密。将此密文作为文本存储在 javascript 块中。

对于您的所有用户,生成一个 javascript 哈希,将他们的用户名映射到主密钥的加密副本(使用每个用户密钥加密)。

最后,创建一个要求输入用户名和密码的网页。输入后,使用用户名查找加密的主密钥。使用用户输入的密码对其进行解密,并使用生成的主密钥解锁原始正文。使用 javascript 将现有的 html 正文替换为解密的正文。

于 2009-01-13T13:59:13.310 回答
0

我不了解客户端脚本,但您可以使用 Web 服务器来限制对您网站的访问。
在 IIS 中可以使用“目录安全”选项卡设置:配置 IIS 网站身份验证

于 2009-01-13T13:15:37.313 回答
0

如果每个人只有一个密码,您可以尝试使用公钥类型的方法。您可以提供一个简单的脚本来执行 RSA 解密(您需要在可以访问某种编程软件的地方进行原始加密)。然后,您可以将内容作为加密字符串提供。你会显示一个密码框,用户输入密码,然后字符串将根据密码解密。如果密码正确,字符串将正确解密,并显示页面。否则,页面看起来就像一堆垃圾。不过要小心,因为这种客户端方法很容易受到暴力破解。

于 2009-01-13T13:23:02.507 回答
0

当然,如果安全不是什么大问题。本质上,您将设置一扇门,上面写着“如果您不知道密码,请不要进来”。任何不使用服务器端技术的东西都可能使用 JavaScript,以及受保护目录中的文件来存储密码。然而,这不是密码保护。可以禁用 JavaScript,这将导致页面加载。毫无疑问,这将通过隐藏内容来解决……但内容仍然可以通过源查看。还有其他几种方法,但如果您有真正值得用密码保护的内容,这不是一个好方法。

于 2009-01-13T13:27:21.220 回答
0

是的,这是可能的,但它不是很漂亮,甚至不是很好。

  • 您的索引页面有一个空的 div,您的受限内容将放在其中。
  • 在页面加载或单击链接时,提示 (window.prompt) 会要求您输入密码。
  • 您的密码经过哈希处理,并与脚本中正确密码的存储哈希(或哈希数组)进行比较。
  • 如果您有匹配项,则通过 AJAX 将内容加载到 div
  • 您可以将密码存储在 cookie 中,这样每次都不会提示(不是很安全,但这不是一个非常安全的系统)
  • 您仍然不是那么安全,因为您将要加载的页面的文件名将在您的脚本中可见,但它可能会阻止非常随意的冲浪者。
  • 您可能会混淆 url,从而需要一些 JavaScript 知识才能查看。例如 rot13

您将需要一个JavaScript 哈希脚本

于 2009-01-13T13:35:39.470 回答
0

或者您可以使用一个神秘的 html 文件名作为密码,并在 / 浏览到该页面(如果存在)中使用 ajax :-)

与其他建议一样安全(或不安全),但可能更容易实施。

于 2009-01-13T13:42:41.423 回答
0

为此,您不需要公钥 - 事实上,公钥解密仅限于在实践中加密其他对称密钥和证书,因为它的计算非常昂贵。你只需要一个共享的秘密。

使用从密码短语派生的密钥(通过散列)使用 AES(例如)加密网页。然后,您必须将密码短语安全地传达给用户并编写一些 javascript 来下载加密内容、提示输入密码短语、解密数据并将其合并到 DOM 中。

这一切都相当混乱且非常脆弱 - 所有用户只有一个密码,一旦它被泄露,你必须更换服务器上的东西,并希望谷歌没有缓存它......建议你转向真正的 ISP

至于你提到的 HTML 密码程序,没有办法知道它不是蛇油或坏掉的......“使用强大算法的最佳安全性”这句话并不完全令人鼓舞!

于 2009-01-13T13:45:21.060 回答