首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >保护全局变量不受用户修改

保护全局变量不受用户修改
EN

Stack Overflow用户
提问于 2018-03-13 10:19:31
回答 1查看 51关注 0票数 0

由于对JavaScript知之甚少,昨晚我遇到了一些令我困惑的事情。我知道,在JavaScript中永远不应该尝试安全地做任何事情,因为一切都是在用户的域中运行客户端。

为了利用这一事实,我正在使用Chrome控制台,摆弄一个实时网站。我有两个帐户,一个具有较高的权限,并设法根据这个权限级别确定了一个全局变量/标志,该变量/标志似乎控制了显示哪些UI元素。

现在要注意的是:如果我试图在无权限帐户上设置这个标志,比如window.hasPermstrue,那么它似乎立即重置为false。当我尝试相反的使用权限帐户--将window.hasPerms设置为false--同样的事情发生了,但相反;它立即重置为true

在JS源代码中查找页面时,我看不到设置此标志的任何点。我尝试了其他一些设置值并随后立即启动debugger的方法;或者创建~5 setInterval函数,使其每1ms运行一次并设置变量,然后将其垃圾邮件日志记录到控制台,认为它可能会显示我的新值一两次。没有什么效果,所以现在我想:

这里有什么我不知道的巫术?是否有可能保护一个变量,使用户无法修改它?如果没有,我可以使用哪些方法来进一步挖掘,并试图找出什么是重置值?

在谷歌上搜索的时候,我没发现什么。不过,我确实注意到了一些对Backbone的引用,我知道这个站点会使用这些引用,以防这很重要。除此之外,我不认为有多少网络技术在使用;jQuery几乎是它得到的先进。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-15 13:57:28

最后,我通过在页面加载期间尽早注入这些代码来解决这个问题:

代码语言:javascript
运行
复制
// 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);
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49253604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档