実際に脆弱性のあるソースコードを確認し、修正してみましょう。
まず、「ソースコードを開く」ボタンをクリックし、「
MainActivity.java」を開いてください。
ソースコードを開く
修正前:
プロジェクト |
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箇所あります。
修正例は以下の通りです。
修正後:
プロジェクト |
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;
// ▼▼▼脆弱性を修正したソースコード▼▼▼
// ログ出力はしない
// ▲▲▲脆弱性を修正したソースコード▲▲▲
Intent intent = new Intent(this, MenuActivity.class);
// URLにトークン情報を設定
String param = String.format("%s?token=%s", URL_ONLINEBANK, getToken(id ,pass));
// ▼▼▼脆弱性を修正したソースコード▼▼▼
// 情報を暗黙的Intentに設定
intent.putExtra("url", param);
// ▲▲▲脆弱性を修正したソースコード▲▲▲
startActivity(intent);
}
|