Shikata Ga Nai

Private? There is no such things.

第59回:アプリ側でできる脆弱性対策

Hello there, ('ω')ノ

✅ 1. 不要な「権限」を要求しない

✖️ NG例:

<uses-permission android:name="android.permission.READ_CONTACTS" />

→ 使っていないのに付けっぱなし。診断で即バレます。

✔ 対策:

  • 最小権限の原則(Principle of Least Privilege)
  • 本当に必要なときだけ runtime permission でユーザーに明示的に許可を求める

✅ 2. ログ出力はリリース時に全て消す

✖️ NG例:

Log.d("Login", "userId=" + userId + ", token=" + token);

→ 本番環境でこれが出ていたら致命的です。

✔ 対策:

  • BuildConfig.DEBUG を活用して、ログ出力をビルドタイプで制御
  • ProGuardルールで Log.* を削除

✅ 3. WebViewにおける安全対策

✖️ NG例:

webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new JsInterface(), "Android");

→ JavaScriptインターフェースが攻撃対象になる

✔ 対策:

  • 必要な画面にのみ限定的にJavaScriptを有効化
  • addJavascriptInterface() は基本的に使わない
  • setAllowFileAccess(false) などの設定も見直す

この続きはcodocで購入