【发布时间】:2020-09-18 12:25:05
【问题描述】:
我正在关注freecodecamp JavaScript oop 课程。本课程介绍了如何在对象内部声明一个私有变量,以应对无法从外部更改的密码和银行账户等情况。对私有变量的唯一访问是通过可以访问私有变量的公共方法。然后给出这个演示代码来说明这一点。
function Bird() {
let hatchedEgg = 10; // private variable
/* publicly available method that a bird object can use */
this.getHatchedEggCount = function() {
return hatchedEgg;
};
}
let ducky = new Bird();
ducky.getHatchedEggCount(); // returns 10
我不明白的是,hatchedEgg 变量如何被称为安全变量。 作为用户/黑客,我所要做的就是猜测从函数 getHatchedEggCount() 返回的变量名称。在这种情况下,hatchedEgg(这对黑客来说并不太难),然后我可以使用这一行来修改私有变量;
Bird.hatchedEgg = 20;
console.log(Bird) // returns { [Function: Bird] hatchedEgg : 20 }
我错过了什么吗?
//-------------- Clarification Edit
显然问题出在 freecodecamp 控制台 (A Bug) 上,它正在更改私有变量的值。 如果你愿意,你可以尝试在这个链接中粘贴上面的代码,你会看到。 freecodeConsoleLink
【问题讨论】:
-
为什么不自己尝试一下呢?您不必是黑客,您已经知道变量的名称。只需尝试控制台登录 ducky.hatchedEgg 看看你得到了什么。剧透:你不会得到 private 变量的值。
-
不。零“安全”。在客户端上用 JavaScript 执行的任何东西都可能是不安全的;缓解措施是最小化潜在风险(例如 XSS),正确确保服务器上的操作安全(例如 HTTPs 和反 CSFR),并定义“可信”数据/访问。最低限度,如果可以注入任意 JS,那么整个对象可能会被重新定义。
-
顺便说一句,什么是 JavaScript oops 课程?
-
@Sнаđошƒаӽ 哈哈我的意思是哎呀看到这个链接freecodecamp.org/learn/…
-
还有你展示的黑客可能会做的例子,它不会改变在内部函数Bird中定义的变量hatchedEgg,它只会在Bird中创建一个字段对象。毕竟,函数是 JavaScript 中的第一类对象。
标签: javascript oop private