众所周知,Javascript中被覆盖的对象可能会导致安全问题,或者只会导致开发错误。我担心这里的安全问题。
假设我有一个敏感的JSON结果将保存在变量中......并且该变量之前已经使用_prototypes,getter / setter定义。进一步假设结果不是仅仅是一个内存分配,而是发送给一个将它发送给“坏人”的函数。现在,我的敏感数据不在我的应用程序中。
我的目的是在给定浏览器中启动会话之前找到一种方法将“清理”Javascript,Cookie,SOP和内存恢复到原始状态。
我知道我在这里提到了一些棘手的组件,但是可以进行任何清洁或验证吗?
是否可以将内存状态重置为已知良好状态?
答案 0 :(得分:4)
在分布式计算中,您必须始终假设客户端掌握在敌人手中(在这种情况下,就是浏览器)。他们会随心所欲地做到这一点。如果您的应用程序的安全性取决于客户端上某些代码的正确执行,那么它就不会安全。
tl;博士:没有。
答案 1 :(得分:0)
安全性的第一个问题是:您的威胁模型是什么?当有人问你这个问题时,这是一个提示,你没有想过你想要防御什么样的威胁。如果你没有想到这一点,你就没有能力建立有效的防御。
您的问题并未解释威胁模型。你想要防守什么?您担心网页上会运行恶意Javascript吗?
如果这是威胁,最好的答案就是不要问这个问题。最好的解决方案是确保您永远不会在页面上运行恶意Javascript的情况下结束。也许您需要XSS防御,以确保没有人可以将恶意Javascript注入您的页面。也许您需要一个安全的Javascript沙箱(如Caja,MS Web Sandbox,Caja,ADsafe,FBJS ......),如果您确实需要从不受信任的来源运行Javascript,以限制Javascript可以执行的操作。我不知道怎么说;你没有提供足够的信息来解决你的问题。
作为一般经验法则,您需要记住客户端执行平台由客户端控制,而不是您。因此,您不能信任客户。如果您拥有客户端不应该知道的机密数据,不会将其发送到客户端!不要让客户端Javascript看到它。如果您违反此规则,则无法重置,重新加载或重新加载,这样可以节省您的费用。
如果您需要安全的Javascript沙箱,请务必在IT安全堆栈交换中阅读以下问题:
您可能会在IT安全方面获得更好的答案。
答案 2 :(得分:-3)
你可以检测变量是否有一个getter/setter
并假设它是脏的,如果是的话:
var data = {hacked:1};
if(Object.getOwnPropertyDescriptor(data, "hacked").value === data.hacked) {
//clean
}