ilo*_*ast 1 javascript security native
有什么方法可以防止用户覆盖本机功能?
例:
var getRand;
(function(){
'use strict';
getRand = function(){
return Math.random();
}
})();
getRand(); //gives a nice random number
Run Code Online (Sandbox Code Playgroud)
页面加载后,在控制台中覆盖。
Math.random = function (){ return 0 };
getRand(); //gives 0 :(
Run Code Online (Sandbox Code Playgroud)
有什么方法可以防止本机函数被覆盖?也许使用CSP或密封对象...这甚至可能吗?
实际上,您可以使用Object.freeze(Math):
Object.freeze()方法冻结一个对象:即,防止向其添加新属性;防止现有属性被删除;并防止更改现有属性或其可枚举性,可配置性或可写性。本质上,对象实际上是不可变的。该方法返回被冻结的对象。
Object.freeze(Math);
// This won't work or it won't replace
// the function with the whole string...
Math.random = "hello world";
Run Code Online (Sandbox Code Playgroud)
除非任何其他库都可以依赖于扩展或修改Math(例如,也许polyfill可能需要添加函数或其他功能,Math但是正如我之前说过的那样,冻结内置对象时这只是一个可能的问题...)。
... Object.defineProperty(...)用于修改现有的属性描述符:
Object.defineProperty(Math, "random", {
configurable: false,
writable: false
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
205 次 |
| 最近记录: |