2010-05-13 14 views
7

Probabilmente sto scrivendo un sistema di plugin per un'applicazione Cocoa (Mac, non iPhone).Objective-C Plugin Architecture Security (Mac, non iPhone)

Un approccio comune è rendere ciascun plugin un pacchetto, quindi iniettare il pacchetto nell'applicazione principale. Mi preoccupo delle implicazioni sulla sicurezza di ciò, poiché il bundle avrà accesso completo al runtime Objective-C. Sono particolarmente preoccupato per un plugin che ha accesso al codice che gestisce la registrazione e le chiavi seriali.

Un altro sistema di plugin che stiamo considerando è basato su notifiche distribuite. Fondamentalmente, ciascun plugin sarà un processo separato e comunicherà solo tramite notifiche distribuite.

C'è un modo per caricare i pacchetti in modo sicuro (ad esempio sandboxing)? In caso contrario, riscontrate problemi nell'utilizzo delle notifiche distribuite? Ci sono altre architetture di plugin che potrebbero essere migliori?

risposta

2

Sì, OS X ha sandboxing support a livello di processo. L'unico client di terze parti open source di cui sono a conoscenza è Chrome. È anche possibile esaminare un wrapper come Native Client.

Detto questo, non c'è davvero alcun motivo per provare i plug-in sandbox per motivi di sicurezza, a meno che non si stiano caricando plug-in o contenuti non affidabili sulla rete (ad esempio un browser Web). Se qualcuno vuole crackare l'applicazione localmente, può semplicemente usare un debugger, DTrace, ecc.

Quale meccanismo IPC si utilizza tra i processi dell'app e del plug-in dipende davvero dal tipo di comunicazione che si sta facendo. Intermachine Distributed Objects (presumo che sia ciò che intendevi scrivere) non è certamente una cattiva scelta per la maggior parte degli scopi, ma non vorresti mandare video su di esso. È possibile verificare CoreIPC, utilizzato dal sottosviluppo WebKit2; funziona su porte Mach.

+0

Grazie per il collegamento sandboxing. In realtà stavo parlando di "NSDistributedNotificationCenter", ma guarderò meglio gli oggetti distribuiti. La mia preoccupazione per i bundle è che gli sviluppatori di plug-in useranno 'objc_getClassList' e avvieranno metodi di swizzling/call che non dovrebbero toccare, sia che si tratti di crack o meno. Sembra che un processo separato sia sicuramente la strada da percorrere. –