2012-03-05 77 views
1

这是众所周知的重写在Javascript中的对象可能会导致安全问题,或只是发展错误。我很担心这里的安全。是否可以验证Browser-Javascript会话的完整性?

假设我有一个敏感的JSON结果将被保存在一个变量中......并且该变量先前已用_prototypes,getter/setter定义。进一步假设,不是只是一个内存分配,结果被发送到一个函数发送给一个“坏人”。现在我的敏感数据在我的应用程序之外。

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

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

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

+2

+1只是因为它被标记为'javascript'和'安全性'。哦谢谢。这是我的一天。 – DefyGravity 2012-03-05 01:32:20

+0

请记住,如果我问为什么?为了什么? – Joseph 2012-03-05 01:35:20

+0

@joseph - 有很多利用重新定义的getter/setter和Javascript的其他方面的漏洞利用。如果我可以重新初始化代码,我会有一个已知的起点。有时这可能需要在会话开始时发生,有时可能需要稍后发生(例如在一段时间之后)。 – LamonteCristo 2012-03-05 01:38:45

回答

4

在分布式计算,你必须假定客户端是在敌人的手中(在这种情况下,这是浏览器)。而且他们会为他们做任何他们想做的事情。如果您的应用程序的安全性取决于客户端的某些代码的正确执行,那么它将不安全。

TL;博士:第

+0

+1。客户端上的JavaScript没有**安全性。没有,纳达,零。如果您希望数据保持安全,请将其保留在服务器上。 – RobG 2012-03-05 02:38:23

+0

刷新页面(如果发生错误)修复*任何* *? – LamonteCristo 2012-03-05 02:41:43

-3

您可以检测,如果变量有一个getter/setter并假定它是脏的,如果真:

var data = {hacked:1}; 

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

安全领域的第一个问题是:什么是你的威胁模型?当有人问你这个问题时,这暗示你没有想过你试图抵御的威胁。如果你没有想到通过,你就无法构建有效的防御。

你的问题没有解释威胁模型。你想捍卫什么?你担心在你的页面上运行恶意JavaScript?

如果这是威胁,最好的答案是不要问这个问题。最好的解决方案是确保您永远不会在恶意JavaScript正在您的页面上运行的情况下结束。也许你需要XSS防御,以确保没有人可以向你的页面注入恶意JavaScript。也许你需要一个安全的Javascript沙箱(如Caja,MS Web Sandbox,Caja,ADsafe,FBJS,...),如果你确实需要从不受信任的源代码运行Javascript,以限制Javascript可以做的事情。我不知道我们怎么说;你没有提供足够的信息来解决你的问题。

作为一般的经验法则,您需要牢记客户端执行平台由客户端控制,而不是您。因此,你不能相信客户。如果您拥有客户端不应该知道的机密数据,不会将其发送给客户端!不要让客户端的Javascript看到它。如果违反此规则,则不会进行重置或重新刷新或重新加载数据,从而节省您的时间。

如果一个安全的Javascript沙箱是你所需要的,请务必在IT阅读这些问题,安全堆栈交换:

你可能会得到有关IT安全性的更好答案。

相关问题