苹果为何又如何在 iOS 上禁止 Safari 之外的应用使用 Nitro JIT 编译?

关注者
66
被浏览
3574
JIT编译需要底层系统支持动态代码生成,对操作系统来说这意味着要支持动态分配带有“可写可执行”权限的内存页。当一个应用程序拥有请求分配可写可执行内存页的权限时,它会比较容易受到攻击从而允许任意代码动态生成并执行,这样就让恶意代码更容易有机可乘。

Safari是iOS内建的浏览器,而JavaScriptCore(又名Nitro)是其中的JavaScript引擎,负责JavaScript代码的执行。为了提供流畅的浏览体验,苹果为JavaScriptCore开发了JIT编译器,并在iOS的Safari上开启。而为了减小由第三方代码引致被攻击的风险,苹果禁止了第三方应用嵌入UIWebView时使用JavaScriptCore的JIT功能。

其实这JIT功能就像iOS上的照片、通信录之类的一样有应用粒度的权限控制。
于是在越狱了的iOS上其实JIT的权限也是可以打开的:How to enable the Nitro Javascript engine for Google Chrome
(但这里并不推荐越狱,只是讨论技术问题而已)