サンプルコード解説

脆弱性のあるソースコード

それでは、実際に脆弱性のあるソースコードを見てみましょう。
以下のコードは、画面に入力された契約番号とログインパスワードを取得し、それを他のActivityに渡して起動している処理ですが、重要な情報をログに出力しているという脆弱性があります。
具体的には下記2つの情報をログに出力しています。
(1)利用者が入力した契約番号とログインパスワードの情報
(2)ログインに使用する情報
これらの情報が悪意のあるアプリに取得された場合、ログに出力された情報を利用してなりすましが可能になります。
プロジェクト 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);
	}