【问题标题】:Is there a way to password protect HTML pages without using a server side language?有没有办法在不使用服务器端语言的情况下对 HTML 页面进行密码保护?
【发布时间】:2010-10-01 03:12:06
【问题描述】:

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

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

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

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

【问题讨论】:

  • 这里的技术使用 HTTP 身份验证,当尝试访问受保护的目录时,这将提示用户输入用户名/密码。

标签: javascript html client passwords


【解决方案1】:

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

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

【讨论】:

  • 这个答案并不完全准确 - 如果用户有权访问它,如果使用用户不知道的密钥对其进行加密,它仍然是安全的。请参阅Denis' answer 了解概述,my answer 了解概念验证实施。
【解决方案2】:

下面是一个此问题的有效解决方案,它使用了我自己实现的加密。

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

该工具托管在此处:

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

这里有源代码:

https://github.com/MaxLaumeister/pagecrypt


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

PageCrypt - 密码保护 HTML

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

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

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

您只需选择一个 HTML 文件和一个密码,您的页面就会受到密码保护。

【讨论】:

  • 您是否添加了一些使用工具的指南?
  • @Anh 你点击进入项目页面了吗?
【解决方案3】:

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

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

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

【讨论】:

    【解决方案4】:

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

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

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

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

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

          【讨论】:

          • 您可以更改HTMLCSStextContent,以便最初没有JS 的内容不存在,但使用JS 它会加载登录页面。然后用户登录后JS再次更改textContentHTML
          【解决方案8】:

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

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

          您需要JavaScript hashing script

          【讨论】:

            【解决方案9】:

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

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

            【讨论】:

              【解决方案10】:

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

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

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

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

              【讨论】:

                猜你喜欢
                • 2012-04-14
                • 1970-01-01
                • 2014-02-06
                • 2019-02-25
                • 1970-01-01
                • 2012-06-16
                • 2012-05-06
                • 2012-06-19
                • 1970-01-01
                相关资源
                最近更新 更多