【问题标题】:Javascript Password Protected area.. must be better wayJavascript密码保护区..必须是更好的方法
【发布时间】:2025-11-07 07:35:01
【问题描述】:

我在 javascript 场景中仍然很新鲜,但我有这段代码可以按预期工作以用于所有意图和目的.. 但只是必须有一种更好、更清洁的方式来处理它,我会只是很想看看它是如何完成的。

function Restricted() {

var password = 'pass1';
var password1 = 'pass2';
var password2 = 'pass3';
var password3 = 'pass4';
var password4 = 'pass5';

if (this.document.login.pass.value == password || this.document.login.pass.value == password1 || this.document.login.pass.value == password2 || this.document.login.pass.value == password3 || this.document.login.pass.value == password4) {

//Do stuff if correct

setTimeout(function() {
setLocation('#'); 
  }, 2000);
}
else {

//Alert them its wrong

}

如您所见.. 输入所有不同的密码很好,并且可以预料,但是将所有不同密码相互比较以判断它们是否有效的整个检查功能一定是最糟糕的工作方式之一围绕这个..哈哈,我看着它几乎是尴尬的。

【问题讨论】:

  • 不要在前端进行密码验证,任何用户都可以随意编辑 Javascript 并访问您正在处理的内容。
  • 如何防止您的用户查看 javascript 并查看密码?
  • @Andrew 你不加密密码,你散列它们。
  • 而且您不会将哈希发送给客户端...
  • 谢谢大家的发言!我会研究其他替代方案。我天真地认为仅限制右键单击访问和混淆以及其他琐碎的事情就足以威慑敌人。大声笑

标签: javascript password-protection


【解决方案1】:

实现您的登录服务器端。您的服务器应确定用户是否值得信赖(通过输入一对已知的凭据),如果是,则允许访问网站的受限部分。

如果用户还没有输入正确的凭据并且没有正确的会话/cookie 来证明它,服务器应该拒绝输入。

了解如何使用您最喜欢的服务器端语言(PHP、NodeJS 等)实现简单的登录/身份验证系统。

【讨论】:

    【解决方案2】:

    您可以将密码保存在数组中,然后使用数组的 indexOf 方法。它返回数组中元素的索引,如果不存在则返回 -1。

    ...
    var passwords = ["pass1", "pass2"];
    if (passwords.indexOf(this.document.login.pass.value) !== -1) {
    ...
    

    但是,在 JavaScript 中比较密码不是一种安全的方法,每个人都可以看到或更改代码。

    【讨论】:

      【解决方案3】:

      我将回答一个更一般的问题,即不参与有关客户端密码验证的更重要的问题......哎呀。一般的问题是:给定一个字符串列表,你如何匹配一个?

      第一件事是获取字符串列表(密码)并将它们放入一个数组中。然后您可以使用内置数组方法(例如indexOf)匹配索引。

      function Restricted() {
        var strings = ['pass1', 'pass2', 'pass3', 'pass4', 'pass5'];
      
        if (strings.indexOf(this.document.login.pass.value) !== -1) {
          //Do stuff if correct
          setTimeout(function() {
            setLocation('#');
          }, 2000);
        } else {
          //Alert them its wrong
        }
      }
      

      【讨论】:

      • 这对于手头的问题来说是完美的,现在来处理问题的其他方面.. 谢谢!
      • 如果数组不包含字符串,则 indexOf 方法返回 -1。但是 -1 被视为 true,因此此解决方案无法正常工作。此外,如果您输入位于索引 0 处的密码“pass1”,它将被视为错误并被评估为错误密码。