[#WP7DEV] Windows phone capabilities security model

image_2 Sviluppando una applicazione per Windows Phone 7, abbiamo la possibilità di intervenire in modo capillare sull modello di security di alcune “funzionalità” (capabilities).
Una “funzionalità” (che da adesso continuerò a chiamare capability [:)] ) è, di fatto, una risorsa per cui esistono problematiche di privacy, sicurezza e costi.

Per capire meglio la problematica, pensiamo ad esempio alle funzionalità di geolocalizzazione (per cui tutti e 3 gli aspetti sussistono). Un utilizzo non “autorizzato” delle funzionalità di geolocalizzazione potrebbe infatti generare problemi di violazione della privacy, generare costi dovuti alla interrogazione dei servizi di localizzazione e, di fatto, compromettere la sicurezza dell’utente.

In Windows Phone 7 (almeno nell’ultima CTP di Aprile), sono definite le seguenti capability:

Nome Descrizione
ID_CAP_NETWORKING Applicazioni con accesso ai servizi di rete. Comunicati perché servizi potrebbero incorrere in costi quando in roaming
ID_CAP_LOCATION Applicazioni con accesso a servizio di localizzazione
ID_CAP_MICROPHONE Applicazioni che accederono al microfono; possono registrare senza indicazione visiva della registrazione in atto
ID_CAP_MEDIALIB Applicaizoni che accedono alla Media Library
ID_CAP_GAMERSERVICES Applicazioni che interagiscono con le live API di XBOX. Divulgate a causa di segretezza, poiché i dati vengono condivisi con XBOX
ID_CAP_PHONEDIALER Applicazioni che effettuano chiamate; possibilità di farlo senza indicazione visiva
ID_CAP_PUSH_NOTIFICATION Applicazioni che possono ricevere notifiche da servizi internet; rilasciato in quanto si può incorrere in costi quando in roaming
ID_CAP_WEBBROWSERCOMPONENT Applicazioni che usano il controllo webbrowser; se gli script sono attivi, ci sono rischi di security

Queste capability possiamo utilizzarle per ridurre la superficie di attacco (e quindi aumentare la sicurezza delle nostre applicazioni) ed eventualmente informare correttamente l’utente (e chiedere conferma dell’effettivo utilizzo di una di esse).

Per configurare le nostre applicazioni, dobbiamo includere le capability di cui la nostra applicazione necessita, nel file WMAppManifest.xml includendo il seguente codice (dalla CTP di Aprile inserito automaticamente):

<App xmlns=”” … > 
<Capabilities>

<Capability Name=”ID_CAP_NETWORKING” />
<Capability Name=”ID_CAP_LOCATION” />
<Capability Name=”ID_CAP_SENSORS” />
<Capability Name=”ID_CAP_MICROPHONE” />
<Capability Name=”ID_CAP_MEDIALIB” />
<Capability Name=”ID_CAP_GAMERSERVICES” />
<Capability Name=”ID_CAP_PHONEDIALER” />
<Capability Name=”ID_CAP_PUSH_NOTIFICATION” />
<Capability Name=”ID_CAP_WEBBROWSERCOMPONENT” />

</Capabilities>

Se la nostra applicazione non necessita di una di queste capability, è sufficiente eliminarla dall’elenco e, qualora l’applicazione dovesse richiedere la suddetta funzionalità eliminata, verrà sollevata una eccezione di tipo UnauthorizedAccessException con un messaggio di “Access denied”.

Riprendendo l’esempio dell’inizio (relativo alla geolocalizzazione), se stiamo sviluppando una applicazione che sicuramente non farà mai uso di questa funzionalità (come una calcolatrice), possiamo tranquillamente disabilitare la capability ID_CAP_LOCATION senza compromettere le funzionalità dell’applicaizone (ma aumentandone la sicurezza).

Technorati Tags: ,