2016-11-22 14 views
1

beginVideoChat()ようAndroidのインテント操作問題

private void beginVideoChat() 
    { 
     Intent intent = new Intent(ProviderDetailsActivity.this, FragmentContainerActivity.class); 
     intent.putExtra("CommunicationEnum", Communications.Video); 
     intent.putExtra("provderId", provider.getProviderId()); 

     this.startActivity(intent); 
    } 

を明示的に私が持っている意図を定義している間、私は、他のいくつかのメソッドを持っていますクラス名を指定します。

私のアプリケーションがクライアントによるセキュリティテストの対象となったときに、Intent Manipulationというセキュリティ上の問題が発生しました。そして同じの説明は以下の通りである:

Severity Rating: 
Medium 

Description: 
Allowing user input to control Intent parameters could enable an attacker to control the behavior of the subsequent activity. 

Risk: 
An intent manipulation issue occurs when the following two conditions are met: 
• An attacker is able to specify the action, classname, or component of an Android Intent. 
For example, an attacker may be able to specify the classname or the component to handle the intent. 
• By specifying the action, classname, or component, the attacker gains a capability that would not otherwise be permitted. 
For example, the program may give the attacker the ability to transmit sensitive information to a third-party software on the device. 

と報告して生成された提案の修正は次のとおりです。

セキュリティメカニズムとして、インテントフィルタに依存しないでください。特別に設計されたインテントを作成するか、明示的なインテントを使用して、このメカニズムを回避するのは簡単です。

Remediation: 

Do not rely on Intent Filters as a security mechanism. It is too easy to bypass this mechanism by creating specially designed Intents or using explicit Intents. 
If private or personal data must be sent, always encrypt it using an industry standard encryption algorithm. 
Verify that all Activities have a legitimate need to be publicly exported. If not, remove any Intent Filters from the Activity and make sure the android:explicit attribute is set to false. 
The best way to secure an Activity is to rely on permission checks. If it is possible, specify a permission on the receiving Activity that will be used to prevent Intents from being received and handled that do not have that specific permission. 

修復で示唆したように:プライベートまたは個人データが送信されなければならない場合

、常に業界標準の暗号化アルゴリズムを使用して暗号化=>これは、私は、暗号化アルゴリズムを使用して、標準のだろう。

私の質問は、インテントにクラス名を指定せずにアクティビティを開始する方法です。

もう1つのクエリは次のとおりです。受信アクティビティの許可チェック方法=>これを解決するために、 Custom Permissionsを使用しています。これを正しく処理する方法はありますか?

ありがとうございます。

+1

"私のクエリは、インテントにクラス名を指定せずにアクティビティを開始する方法です。" - これは、推奨事項とは完全に逆行しています。マニフェストの 'FragmentContainerActivity'の' '要素に' 'がありますか?また、テスト自体にバグがあるため(例:Androidにはアンドロイド:明示的な属性はありません)、クライアントにこのテストに使用したものを問い合わせてください。 "受信活動について何らかの許可チェックを行う方法は?" - アクティビティがエクスポートされていない場合(例えば、 ''がある場合)は必要ありません。 – CommonsWare

+0

@CommonsWare:はいマニフェストファイルのFragmentContainerActivityにインテントフィルタがあります。しかしながら、この報告書は、インテントフィルター機構を容易にバイパスすることができることを示唆している。したがって、彼らはタグと一緒に余分なチェックとしてアクセス許可を使用するように提案しています。アクティビティにインテントフィルタがない場合、アクティビティの明示的なプロパティをアンドロイドに設定することを提案しました。 – Zax

+0

"はい、マニフェストファイルのFragmentContainerActivityにインテントフィルタがあります" - '<インテントフィルタ> 'を取り除く。 "彼らは、タグと一緒に余分なチェックとしてアクセス許可を使用するように提案しました。あるいは、' 'を取り除くことができます。 「彼らはアンドロイドを設定するように提案しています:アクティビティにインテントフィルタがない場合、アクティビティの明示的なプロパティをfalseに設定する」 - Android SDKにはアンドロイド:明示はありません。ですから、なぜあなたはこのアクティビティで ''を持っていますか? – CommonsWare

答えて

1

あなたはbeginVideoChat()で活動を開始する方法はokですとないセキュリティの警告で問題:

が...行動以降の活動の を制御するために、攻撃者が可能性があります。ここ

問題は、他のすべてのアプリあらゆる可能provderIdで「FragmentContainerActivity」から「ビデオチャット」を始めることができるということです。

"FragmentContainerActivity" intent-apiは不正な呼び出しから保護されていません。

これが本当にセキュリティ上の問題であるかどうかは、アクティビティとその制御パラメータがどの程度敏感であるかによって決まります。

例:ログインアクティビティとビデオチャットアクティビティを最初に呼び出す主なアクティビティがある場合、ログインせずにビデオチャットアクティビティを開くことができます。

+0

返事をありがとう。 putExtra()メソッドを使用して別のアクティビティに送信するデータをエンコードするためのメカニズムを提案できますか? – Zax

+1

他のアプリが「ビデオチャット」と呼んでいるときにセキュリティ上の問題が本当にありますか?ログインしなくても "ビデオチャット"が呼び出されないようにするには、後続のアクティビティで確認できる追加のパラメータとしてuseridとpassword-hashを入れることができます。 – k3b

関連する問題