我可能正在为 Cocoa 应用程序(Mac,而不是 iPhone)编写一个插件系统。
一种常见的方法是将每个插件打包为一个包,然后将该包注入到主应用程序中。我担心这样做的安全隐患,因为捆绑包将具有对 Objective-C 运行时的完全访问权限。我特别关心能够访问处理注册和序列号的代码的插件。
我们正在考虑的另一个插件系统是基于分布式通知的。基本上,每个插件都是一个单独的进程,它们仅通过分布式通知进行通信。
有没有办法安全地加载捆绑包(例如沙箱)?如果没有,您认为使用分布式通知有什么问题吗?还有其他更好的插件架构吗?
是的,OS X 有沙盒支持 http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man7/sandbox.7.html#//apple_ref/doc/man/7/sandbox在每个进程级别。我所知道的唯一开源第三方客户端是Chrome http://src.chromium.org/cgi-bin/gitweb.cgi?p=chromium.git;a=blob;f=chrome/common/sandbox_mac.mm。您还可以研究包装器,例如本地客户端 http://code.google.com/p/nativeclient/.
也就是说,出于安全原因尝试沙箱插件确实没有意义,除非您通过网络(即网络浏览器)加载不受信任的插件或内容。如果有人想在本地破解您的应用程序,他们只需使用调试器、DTrace 等即可。
您在应用程序和插件进程之间使用的 IPC 机制实际上取决于您正在进行的通信类型。对于大多数用途来说,机器间分布式对象(我认为这就是您想要编写的内容)当然不是一个坏选择,但您不想通过它发送视频。你可以看看CoreIPC http://trac.webkit.org/browser/trunk/WebKit2/Platform/CoreIPC,其中欠发达的WebKit2 http://trac.webkit.org/wiki/WebKit2用途;它通过马赫端口工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)