サンプルアプリの脆弱性
サンプルアプリ「08オンライン銀行」に存在している脆弱性について詳しく説明します。
具体的にどのような実装が脆弱性につながっているのか、ソースコードを確認してみましょう。
脆弱性のあるソースコード
プロジェクト |
OutputLog |
ソースファイル |
MainActivity.java |
public void onClickLogin(View v) {
// 入力された契約番号とパスワードの取得
String id = ((EditText) findViewById(R.id.edittextId)).getText().toString();
String pass = ((EditText) findViewById(R.id.edittextPass)).getText().toString();
// 未入力項目がある場合はメッセージ表示
if ("".equals(id) || "".equals(pass)) {
Toast.makeText(this, "入力内容に不備があります", Toast.LENGTH_LONG).show();
return;
}
// 入力内容をログに出力する
String log = "ID:" + id + " PASS:" + pass;
// ▼▼▼脆弱性のあるソースコード▼▼▼
// ログ出力
Log.v(getPackageName(), log);
// ▲▲▲脆弱性のあるソースコード▲▲▲
Intent intent = new Intent(this, MenuActivity.class);
// URLにトークン情報を設定
String param = String.format("%s?token=%s", URL_ONLINEBANK, getToken(id ,pass));
// ▼▼▼脆弱性のあるソースコード▼▼▼
// 情報を明示的Intentに設定
intent.setData(Uri.parse(param));
// ▲▲▲脆弱性のあるソースコード▲▲▲
startActivity(intent);
}
|
脆弱性の原因となっている処理は以下の2点です。
次は、脆弱性の修正方法について説明します。