【问题标题】:Creating a private and protected members in Javascript在 Javascript 中创建私有和受保护的成员
【发布时间】:2015-09-04 09:34:15
【问题描述】:

您能否分享您对在 Javascript 中创建私有和受保护成员的看法。

我的意思是真正的保护,而不仅仅是像 Douglas Crockford 所说的那样。

请勿使用 _(下划线)作为名称的第一个字符。它有时用于表示隐私,但实际上并不提供隐私。如果隐私很重要,请使用提供私人成员的表格。避免表现出缺乏能力的惯例。

       "use strict";

        function MyMain(){
          this.checkauth=false;
        }

        MyMain.prototype.init=function(){
          return Object.create(this);
        }

        MyMain.prototype.authenticate=function(key){

 //resp is server response hold true for the given key.  here validate method will interact with server and get concerned response
             var resp=validate(key);
            if(resp){
              this.checkauth=true;
              return true;
            }
            return false;
        }

        MyMain.prototype.test=function(){
          if(this.checkauth==true){
            console.log("this is working")
          }else{
              console.log("Not authorized")
          } 
        }

好吧,我没能解释清楚,请参阅我所做的编辑。

我无意在客户端进行授权。我在服务器上实现了它并让私人成员成为真实的,说服务器已经验证了用户,我的问题是如何确保它的安全。

有权访问我的 Javascript 文件的用户可以读取所有文件并像这样进行身份验证。

var main=new MyMain();
main.checkauth=true;
main.test();

寻求有关通过 javascript 创建安全身份验证的帮助。

【问题讨论】:

  • 永远不要相信客户端代码。 始终在服务器端验证用户输入。
  • “寻求有关通过 javascript 创建安全身份验证的帮助。”我想你能得到的最好帮助是:不要。
  • 您认为“受保护的成员”根本无法检查或访问吗?恐怕我不得不打消你这个念头。 “传统”隐私在实际安全性方面并不比其他任何东西更安全。它仍然只是在您的浏览器中运行的 Javascript。成员封装和访问保护只是为了帮助开发人员传达预期用途,仅此而已。就这一点而言,下划线与作用域变量的价值相同。

标签: javascript oop private-members


【解决方案1】:

虽然有多种方法可以屏蔽变量并使其难以访问,但这些技术的主要好处是它们会阻止您意外访问它们

浏览器的所有者可以访问您发送给浏览器的所有代码所有数据

您无法阻止他们访问它。

如果您想进行安全身份验证,那么您必须在服务器上进行。

我无意在客户端进行授权。

如果您没有在客户端进行身份验证,那么用户设置 main.checkauth=true; 对您来说不是问题。

如果用户未获得授权,您需要不发送只有授权用户才能使用的数据和 JavaScript。目前,您似乎正在服务器上进行授权,但无论如何都将授权用户的所有数据/JS 发送到客户端(只是使用一点客户端代码,上面写着“请不要看这个”)。

【讨论】:

  • 也许他不知何故在他的 ASP.net 服务器上运行 JavaScript sn-ps。如果 OP 使用的是 node.js,他会标记它,他不会担心用户访问 JS 文件。
  • 我不知道在客户端进行身份验证,我使用过 Facebook SDK,我牢记这一点。我需要在服务器响应上使私有变量为真
  • @saikiran — 这并不能解决您的问题。私有变量仍在用户的控制下运行。您需要通过服务器进行身份验证,而不仅仅是在浏览器告诉您用户已通过 Facebook 进行身份验证时信任浏览器。
  • 基本上:浏览器说:“老兄,我被授权了” > 服务器说:“不,你不是!” > 服务器拒绝为需要授权的页面发送 HTML / JS。
  • 你没有。您根本不会将应该仅供授权用户使用的 JavaScript(或数据)发送到浏览器,除非他们已经过身份验证并且您已在您的服务器上确认了该身份验证。
猜你喜欢
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 2017-09-18
  • 2016-07-15
  • 2012-09-12
  • 2012-05-03
  • 1970-01-01
  • 2011-07-09
相关资源
最近更新 更多