Android Service 訪問安全

l_serein發表於2012-05-03

《Application Security for the Android Platform》55頁說到service的安全

1
startService(new Intent(this,MyService.class))
這種內部自己呼叫的是無視許可權各種限制的,後面的自定義許可權這這種沒影響。

如果service沒有  <intent-filter />屬性,那麼任何其他非當前應用都無法使用該service,一用就報許可權錯誤(就算你給service弄了自定義的許可權,然後呼叫其的應用也有該自定義的許可權依然不行),沒有  <intent-filter />就只能給自己用。

然後是  <intent-filter />留空,這樣的話隨便呼叫,只要知道具體的class路徑

比如

1
Intent i = new Intent();
2
i.setClassName("org.qii.security.three","org.qii.security.three.MyService");
3
startService(i);
之後是在 <intent-filter />留空的情況下提供受限制的共享,就是加自定義許可權,只許自己的其他程式用。

自定義許可權的name一定是需要一個逗號……不然Android不認,不認也就罷了也不報錯……坑爹的

最簡單的自定義許可權就是這樣,當然這wo.cao命名是亂來的,正常來說前面是包名。


1
<permission android:name="wo.cao"/>
2
<uses-permission android:name="wo.cao"/>
3
 
4
   <service android:name="MyService"
5
            android:permission="wo.cao">
6
       <intent-filter/>
7
   </service>
其他應用如果要呼叫這個MyService,必須宣告 <uses-permission android:name="wo.cao"/>,當然自定義許可權還有很多選項可以細調,最簡單的就是這樣了。

沒宣告許可權就去用,就會這樣:

1
Caused by: java.lang.SecurityException: Not allowed to start service Intent { cmp=org.qii.security.three/.MyService } without permission wo.cao


相關文章