是否可以验证浏览器Javascript会话的完整性?

是否可以验证浏览器Javascript会话的完整性?,javascript,security,Javascript,Security,众所周知,Javascript中被重写的对象可能会导致安全问题,或者只是开发错误。我担心这里的安全 假设我有一个敏感的JSON结果,它将保存在一个变量中。。。这个变量以前是用一个_原型getter/setter定义的。进一步假设结果不是一个内存分配,而是发送给一个函数,该函数将结果发送给一个“坏家伙”。现在我的敏感数据不在我的应用程序中 我的目的是找到一种方法,在给定浏览器中启动会话之前,将Javascript、cookies、SOP和内存“清理”回原始状态 我知道我在这里提到了一些棘手的组件

众所周知,Javascript中被重写的对象可能会导致安全问题,或者只是开发错误。我担心这里的安全

假设我有一个敏感的JSON结果,它将保存在一个变量中。。。这个变量以前是用一个_原型getter/setter定义的。进一步假设结果不是一个内存分配,而是发送给一个函数,该函数将结果发送给一个“坏家伙”。现在我的敏感数据不在我的应用程序中

我的目的是找到一种方法,在给定浏览器中启动会话之前,将Javascript、cookies、SOP和内存“清理”回原始状态

  • 我知道我在这里提到了一些棘手的组件,但有可能进行任何清理或验证吗

  • 是否可以将内存中的状态重置为已知良好状态


在分布式计算中,您必须始终假定客户机在敌人手中(在本例中,这就是浏览器)。他们想怎么做就怎么做。如果应用程序的安全性取决于客户端某些代码的正确执行,那么它就不安全了


tl;dr:没有。

在分布式计算中,您必须始终假定客户端在敌人手中(在本例中,这就是浏览器)。他们想怎么做就怎么做。如果应用程序的安全性取决于客户端某些代码的正确执行,那么它就不安全了


tl;dr:否。

您可以检测变量是否具有
getter/setter
,如果为真,则假设它是脏的:

var data = {hacked:1};

if(Object.getOwnPropertyDescriptor(data, "hacked").value === data.hacked) {
  //clean
}

您可以检测变量是否具有
getter/setter
,如果为true,则假定该变量为脏变量:

var data = {hacked:1};

if(Object.getOwnPropertyDescriptor(data, "hacked").value === data.hacked) {
  //clean
}

安全方面的第一个问题是:您的威胁模型是什么?当有人问你这个问题时,这是一个暗示,表明你没有考虑到你试图防御的威胁。如果你没有考虑清楚,你就不适合建立有效的防御

你的问题无法解释威胁模型。你想防御什么?您担心页面上运行的恶意Javascript

如果这就是威胁,最好的答案就是联合国提出这个问题。最好的解决方案是确保您永远不会出现页面上运行恶意Javascript的情况。也许您需要XSS防御,以确保没有人可以将恶意Javascript注入您的页面。如果您确实需要从不受信任的源运行Javascript,那么您可能需要一个安全的Javascript沙盒(如Caja、MS Web沙盒、Caja、ADsafe、FBJS等等),以限制Javascript的功能。我不知道我们怎么知道;您没有向我们提供足够的信息来解决您的问题

一般来说,您需要记住,客户机执行平台是由客户机控制的,而不是由您控制的。因此,您不能信任客户。如果你有客户不应该知道的机密数据,不要发送给客户!不要让客户端Javascript看到它。如果您违反此规则,则不会有任何重置、重新布线或重新加载的操作来拯救您

如果您需要安全的Javascript沙箱,请确保阅读IT安全堆栈交换上的以下问题:


在IT安全方面,您可能会得到更好的答案。

安全方面的第一个问题是:您的威胁模型是什么?当有人问你这个问题时,这是一个暗示,表明你没有考虑到你试图防御的威胁。如果你没有考虑清楚,你就不适合建立有效的防御

你的问题无法解释威胁模型。你想防御什么?您担心页面上运行的恶意Javascript

如果这就是威胁,最好的答案就是联合国提出这个问题。最好的解决方案是确保您永远不会出现页面上运行恶意Javascript的情况。也许您需要XSS防御,以确保没有人可以将恶意Javascript注入您的页面。如果您确实需要从不受信任的源运行Javascript,那么您可能需要一个安全的Javascript沙盒(如Caja、MS Web沙盒、Caja、ADsafe、FBJS等等),以限制Javascript的功能。我不知道我们怎么知道;您没有向我们提供足够的信息来解决您的问题

一般来说,您需要记住,客户机执行平台是由客户机控制的,而不是由您控制的。因此,您不能信任客户。如果你有客户不应该知道的机密数据,不要发送给客户!不要让客户端Javascript看到它。如果您违反此规则,则不会有任何重置、重新布线或重新加载的操作来拯救您

如果您需要安全的Javascript沙箱,请确保阅读IT安全堆栈交换上的以下问题:


您可能会在IT安全方面得到更好的答案。

+1因为它被标记为“javascript”和“安全”。哦,谢谢。这让我很开心。介意我问一下为什么吗?还有什么呢?@joseph-有许多利用重新定义的getter/setter和Javascript的其他方面的漏洞。如果我可以重新初始化代码,我将有一个已知的起点。有时这可能需要在会话开始时发生,有时可能需要在以后发生(例如在一个时间间隔之后)。@makerofthings7通过重新定义getter/setter,您的意思是通过覆盖对象来更改对象的功能,对吗?@makerofthings7您至少可以提出这些“其他方面”的问题吗为了澄清问题+1,仅仅因为它被标记为“javascript”和“security”。哦,谢谢。这让我很开心。介意我问一下为什么吗?“为了什么呢?”约瑟夫-有