javascript:是object.seal(class)与object.seal(class.prototype)相结合吗?

时间:2011-04-22 21:31:51

标签: javascript web-services web-applications

是Object.seal(Class)与Object.seal(Class.prototype)相结合,足以“保护”我的班级免遭滥用吗?

这是我的班级:

var Lazy;
(function(){
  var value;
  var value_exists=false;
  var init;
  Lazy=function(_init){
    init=_init;
  };
  Lazy.prototype={get V(){
                    if(!value_exists){
                      value=init();
                      value_exists=true;
                    }
                    return value;
                  },set V(_value){
                    value=_value;
                    value_exists=true;
                  }};
  Object.seal(Lazy);Object.seal(Lazy.prototype);
})();

它的工作原理如下,我的代码首先运行。然后我抓住一个mashup的代码(可能是动态生成的)并运行。问题是我无法判断mashup是友好还是肮脏。所以我保护我的脚本不受我的脚本的影响,我的代码先运行后运行并运行。

他可能不是“真正的攻击者”。但如果他弄乱了我的代码,那么应用程序将会抛出异常并停止运行..而不是我希望我的用户体验的东西。因此这个问题对我很重要。

我知道用户可以破解源代码,因为客户端上没有任何东西是安全的。但对于这个问题,我们可以假设这里的用户不是攻击者。我的目的很明确:我不希望我的用户在使用网站时遇到异常(由于我在网站中包含的那些mashup)。如果用户本人是攻击者,那么让他体验所有有趣的事情都是没有问题的,无论如何都是他自己的问题。

我担心的是mashup中的代码。 (我的网站不允许用户注入任何代码,但混搭可以做到这一点)

1 个答案:

答案 0 :(得分:1)

Object.freeze(Lazy);
Object.freeze(Lazy.prototype);

Object.freeze是Object.seal,然后是一些;它还使现有属性不可写(参见this article。)这就像你能得到的那样硬。但仍然没有用作真正的保护机制。