JSSECが公開している『Androidアプリのセキュア設計・セキュアコーディングガイド』の2016-09-01版を共有用にまとめているもののうち、「6.1. Clipboardから情報漏洩する危険性」のものとなります
詳細やサンプルコードについては原著の方を参考ください
チェックポイント
- センシティブな情報が含まれている場合は、コピー・カットを出来ないようにする
Tips
Clipboardについて
コピー&ペーストを使う際に、ユーザーやアプリによってコピーされた情報は、一旦Clipboardと呼ばれるバッファに格納されます。このClipboardは端末につき1つの実体しかなく、どのアプリからでも常時中身が取得できるようになっています。
つまり、コピー・カットした情報は全て漏洩する危険性があります
対策について
考える状況が2つあります
- 他アプリから自アプリへコピーする状況
- 自アプリから他アプリへコピーする状況
前者に関しては、根本的な対策はありません。Androidには第三者アプリのコピーを制御が出来ないからです
後者に関しては、Viewのコピー・カットを禁止することで、Clipboardに情報がいかないようにすることが出来ます。方法としては、長押しの無効化と項目からコピー・カットを消す方法があります
対策を行うべきViewと状況
- TextViewはデフォルトで選択不可能なので、対策は必要ありません。ただし、コピー可否を動的に設定できるため、コピーを可能にする場合、センシティブな情報が表示される可能性がないかを検討する必要があります
- EditTextは属性がPasswordになっている場合、コピーが禁止のため、対策は必要ありません。ただし、平文表示する場合、入力タイプが変化し、コピーカットが有効になるので対策が必要です。
- ルールを適用するには、ユーザビリティの面を考慮する必要があります。例えば、センシティブな情報を表示する可能性があるからと言って、コピーを無効化した場合、使い勝手が悪くなります。その場合、センシティブな情報を表示する場合は、別のコンポーネントを使用する、注意喚起をするなど検討して、対応を決めると良いです