我在学习ECMAScript的继承概念时看到
要用 ECMAScript
实现继承机制,您可以从要继承的基类入手。所有开发者定义的类都可作为基类。出于安全原因,本地类和宿主类不能作为基类,这样可以防止公用访问编译过的浏览器级的代码,因为这些代码可以被用于恶意攻击。
请问这里面的本地类和宿主类指的是什么?为什么访问他们之后可以造成恶意攻击?
我在学习ECMAScript的继承概念时看到
要用 ECMAScript
实现继承机制,您可以从要继承的基类入手。所有开发者定义的类都可作为基类。出于安全原因,本地类和宿主类不能作为基类,这样可以防止公用访问编译过的浏览器级的代码,因为这些代码可以被用于恶意攻击。
请问这里面的本地类和宿主类指的是什么?为什么访问他们之后可以造成恶意攻击?
感觉,本地类应该是 Native Object 吧。。定义在这里:http://es5.github.io/#x4.3.6
宿主类是 Host Object,定义在这里:http://es5.github.io/#x4.3.8
简单来说,Native Object 就是,不依赖宿主环境的 ECMAScript 对象。比如,Function
, RegExp
, Date
这类的构造器
相对应地,Host Object 是依赖于宿主环境的 ECMAScript 对象。比如 window
, location
, document
这类的
宿主环境,我的理解就是:运行 ECMAScript 的地方。。比如,你可以在命令行里的 nodejs
运行,也可以在浏览器中运行。那么不管你在哪儿运行,new Date()
总会给你正确的结果,但 document.getElementById
就只能在浏览器环境中实现了,nodejs
并没有这个。
至于为什么修改这些会导致安全风险,当然了。比如构造器,比如你声明 var a = 1
,就会构造出一个 Number
的实例,那么如果你的 Number()
构造器被改了,里面给你加上了一些钓鱼链接什么的,不就很尴尬了
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
4 回答2.5k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
本地类是js引擎提供的类,String Object等等。宿主类是你运行环境提供的,像chrome这类浏览器提供的 window这个类就是宿主类。