2012-09-23 22 views
5

私のアプリケーションのアクティビティにインテントフィルタを追加して、他のアプリケーションが(クラウドの)特定のデータにアクセスできるようにしました。ただし、一部のユーザーはプライバシーに関する懸念を抱くことがあり、データが使用されているとあまり満足していない可能性があります。しかし、他のアプリを接続して、自分の設定などをクラウドにバックアップすることができます。Androidのインテントを制限する方法やセキュリティを追加する方法

悪意のあるアプリを特定できないように、私のアプリケーションにアクセスできるアプリを制限するためのセキュリティ機構が必要です。悪意のあるアプリを特定することは不可能ですが、特定の「信頼できる」パッケージ名。しかし、私はそれを行う方法を見つけることができません。

もう1つのオプションは許可要件を追加することですが、これはより多くのユーザーが見過ごすことがあります。それはユーザーの間違いですが(私が許可を加えなければ私のせいです)、最近のアプリはユーザーのコンテンツを公開するために多くの嫌がらせをしています。

3番目のオプションは、アプリのアクセスのたびにユーザーに確認することです。しかし、私はpackagenameを持っていないので、意図がどこから来たのかわかりません。また、私のアプリはクラウドからの特定の転送を自動化するので、ユーザはその意図を「設定して忘れるかもしれない」。

私はちょうど2つの異なるアプリケーション間でいくつかのコマンドを転送する意図に頼っています。私は自分自身でセーフガードを実施しなければならないと思うが、Googleが既にいくつかの流れを持っているならば、私はその車輪を再発明したくない。もしそうでなければ、自分の認証フローなどを実装する必要があります。

編集:私はノブですので、私はあまりにもゆるやかに用語を使用します。質問をより良くしようとしました。

アプリについてもう少しです。クラウドサービスとのダウンロード/アップロードを自動化します。インテントを送信することによって、別のアプリでダウンロードまたはアップロードするファイルを指定することができます。私はこのことをユーザーが知らなくては望んでいないので、意図が入ったときに私は彼に連絡し、データを受け入れます。また、アプリケーションで定期的な転送を設定することもできます。ユーザーは今度は2回(許可を受けてから、意図が入ったときに)尋ねられましたが、彼は不平を言う権利はありません。しかし、この受け入れ可能なプラクティスか、もっと何らかの形でそれを保護する必要がありますか?

答えて

2

呼び出し元プロセスのUID(およびそのpackageName)、またはBinder.getCallingPidを呼び出して呼び出し元プロセスのPIDを取得し、呼び出し元プロセスのこのpid discover packageNameを取得する必要があります。いくつかのパッケージは同じUIDを使用できます(同じ証明書でのみ署名されている場合)。いくつかのパッケージは1つのプロセスを共有できますが、同じUIDを持つ必要があります。

+0

私はこれがstartActivityForResultでは有効であり、startActivityでは機能しないことを理解します。これは問題ではなく、明確にしたいだけです。残念ながら私はバインダーについてあまり知らない。 – thedesolatesoul

2

私は、あなたが持っていない私のアプリ

にインテントフィルタを追加しました。 <activity>、または<service>、または<provider><intent-filter>を追加しましたが、<application>に追加していません。今

、私は正確に、あなたは「悪質なアプリを特定しようとするにはどうすればよい、

など私は悪質なアプリケーションを許可しないことができるようにアプリが鉱山にアクセスできるかを制限するセキュリティ・メカニズムのいくつかの種類を必要とします"?

私の好む選択肢は、パッケージ名でインテントをフィルタリングすることによって特定の「信頼できるプロバイダ」からインテントを有効にできるということです。しかし、私はそれを行う方法を見つけることができません。

これはサポートされていません。

もう1つのオプションは許可要件を追加することですが、これはより多くのユーザーが見過ごすことがあります。

ユーザーが許可要件を「見過ごす」場合、ユーザーは「プライバシーに関する懸念」に関する苦情の根拠はありません。

しかし、私はパッケージ名を持っていないので、意図がどこから来たのかわかりません。

一部のケースでは、Yuryの推奨が機能します。

それは、Androidには、このような概念はありません意図

に来るとき、セキュリティのための私のオプションは何ですか。 Intentには「セキュリティ」がありません。整数以上には「セキュリティ」があります。アクティビティ、サービス、およびブロードキャスト受信者はコードを表し、コードはコードを保護するためのセキュリティ対策を実装できます。

これはIPCの方法が間違っていますか?

あなたは(どうやら、それはIntentオブジェクトを必要とする以外の)IPCのためにやっていることを示していないので、この質問に答えることは不可能です。

+1

私はあなたの答えの方法が好きです) – Yury

+0

私は質問を編集して、より明確にしました。私は言葉をあまりにもゆるく使っていて、十分にはっきりしていないと思います。うまくいけば、それは今より良いです。 – thedesolatesoul

+0

@thedesolatesoul:「インテントを送信する」 - 「ブロードキャストを送信する」という意味ですか?他に何か意味がありますか? Androidには「意図を送信する」という概念はありません。 「しかし、この受け入れ可能な練習ですか、それとも何らかの形でそれを守る必要がありますか?それはあなたに現在または将来のユーザーに尋ねる質問です。 – CommonsWare

0

アプリにインテントを送信することが許可されている唯一のアプリがある場合は、アプリの<permission>を作成し、セキュリティレベルを「署名」に設定することができます。これにより、同じ署名鍵で署名されたアプリへのアクセスが制限されます。

<manifest ...> 
    ... 
    <permission name="com.thedesolatesoul.myapp.MY_ACCESS" 
     android:permissionLevel="signature" 
     android:label="@string/my_access_label" 
     android:description="@string/my_access_description" 
     /> 
</manifest> 

は、その後、あなたのアプリにインテントを送ることができる唯一のアプリが彼らのマニフェストに適切な<uses-permission>エントリを持っているが、同じ鍵で署名されたものです。

関連する問題