由于对JavaScript知之甚少,昨晚我遇到了一些令我困惑的事情。我知道,在JavaScript中永远不应该尝试安全地做任何事情,因为一切都是在用户的域中运行客户端。
为了利用这一事实,我正在使用Chrome控制台,摆弄一个实时网站。我有两个帐户,一个具有较高的权限,并设法根据这个权限级别确定了一个全局变量/标志,该变量/标志似乎控制了显示哪些UI元素。
现在要注意的是:如果我试图在无权限帐户上设置这个标志,比如window.hasPerms到true,那么它似乎立即重置为false。当我尝试相反的使用权限帐户--将window.hasPerms设置为false--同样的事情发生了,但相反;它立即重置为true。
在JS源代码中查找页面时,我看不到设置此标志的任何点。我尝试了其他一些设置值并随后立即启动debugger的方法;或者创建~5 setInterval函数,使其每1ms运行一次并设置变量,然后将其垃圾邮件日志记录到控制台,认为它可能会显示我的新值一两次。没有什么效果,所以现在我想:
这里有什么我不知道的巫术?是否有可能保护一个变量,使用户无法修改它?如果没有,我可以使用哪些方法来进一步挖掘,并试图找出什么是重置值?
在谷歌上搜索的时候,我没发现什么。不过,我确实注意到了一些对Backbone的引用,我知道这个站点会使用这些引用,以防这很重要。除此之外,我不认为有多少网络技术在使用;jQuery几乎是它得到的先进。
发布于 2018-03-15 13:57:28
最后,我通过在页面加载期间尽早注入这些代码来解决这个问题:
// save the original function
OBJECT_DEFINE_PROPERTY = Object.defineProperty;
// overwrite Object.defineProperty with our own wrapped version
Object.defineProperty = function (obj, prop, vals) {
// modify values/writability as required, if it's a property we want control over
if (prop === ... ) {
vals.value = ... ;
vals.writable = ... ;
}
// call the original function to define our (modified) property
OBJECT_DEFINE_PROPERTY(obj, prop, vals);
};https://stackoverflow.com/questions/49253604
复制相似问题