6

アプリケーションのアクティビティにインテントフィルターを追加して、他のアプリが自分のアプリを介して(クラウドから)特定のデータにアクセスできるようにしました。ただし、一部のユーザーはプライバシーの懸念があり、使用されているデータにあまり満足していない可能性があります。ただし、他のアプリはプラグインしてマイニングしたり、設定などをクラウドにバックアップしたりできます。

さて、悪意のあるアプリなどを禁止するために、どのアプリが私のものにアクセスできるかを制限するための何らかのセキュリティメカニズムが必要です。悪意のあるアプリを特定することは不可能ですが、特定の「信頼できる」ものだけを許可することによって、ある種のアクセス制御が必要です。パッケージ名。しかし、私はそれを行う方法を見つけることができません。

もう1つのオプションは、アクセス許可要件を追加することですが、これはより多くのユーザーによって見落とされる可能性があります。それはユーザーのせいですが(そして、権限を追加しないと私のせいになります)、最近、アプリはユーザーコンテンツを公開するために多くの問題を抱えています。

3番目のオプションは、アプリが鉱山にアクセスするたびにユーザーにプロンプ​​トを表示することです。しかし、私はパッケージ名を持っていないので、意図がどこから来たのかわかりません。また、私のアプリはクラウドからの特定の転送を自動化するため、ユーザーは意図を「設定して忘れる」可能性があります。

私は、2つの異なるアプリケーション間でいくつかのコマンドを転送するという意図だけに依存しています。自分でセーフガードを実装する必要があると思いますが、Googleがすでにいくつかのフローを実施している場合は、車輪の再発明をしたくありません。そうでない場合は、独自の認証フローなどを実装する必要があります。

編集:私は初心者なので、用語をあまりにも緩く使用します。質問をより良くしようとしました。

アプリについてもう少し。クラウドサービスから/へのダウンロード/アップロードを自動化します。インテントを送信することで、別のアプリがダウンロードまたはアップロードするファイルを指定できます。ユーザーが知らないうちにこれが発生することを望まないので、インテントが入ったときにユーザーにプロンプ​​トを表示し、データを受け入れます。ただし、アプリケーションは定期的な転送を設定することもできます。ユーザーは2回プロンプトが表示されますが(1回はアクセス許可で、もう1回はインテントが入ったとき)、ユーザーは文句を言う権利がありません。しかし、これは許容できる慣行ですか、それともどうにかしてそれを保護する必要がありますか。

4

3 に答える 3

2

アプリにインテント フィルタを追加しました

いいえ、していません。、 または 、またはにを追加しました<intent-filter>が、 には追加しませんでした。<activity><service><provider><application>

さて、悪意のあるアプリなどを禁止できるように、アクセスできるアプリを制限するための何らかのセキュリティメカニズムが必要です.

正確には、「悪意のあるアプリ」をどのように特定するつもりですか?

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

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

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

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

ただし、パッケージ名がないため、意図がどこから来たのかわかりません。

場合によっては、Yury の推奨事項が機能します。

インテントに関するセキュリティのオプションは何ですか

Android にはそのような概念はありません。Intents には「セキュリティ」がありません。整数に「セキュリティ」があるのと同様です。アクティビティ、サービス、およびブロードキャスト レシーバーはコードを表し、コードはそのコードを保護するためのセキュリティ対策を実装できます。

または、これは IPC の間違った方法ですか?

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

于 2012-09-23T23:40:27.333 に答える
2

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

于 2012-09-23T21:31:22.493 に答える
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>があり、同じキーで署名されているアプリです。

于 2016-03-21T18:40:14.917 に答える