状況
ログイン処理の例外処理のレビュー。
最も優先すべき指摘は?
except Exception as e: logger.info(f"login failed: email={email} password={password}") return Response(traceback.format_exc(), status=500)正答
- 失敗はエラーなので、logger.info ではなく logger.error を使うべき
- パスワードをログに書き、スタックトレースを利用者の画面に返している
- 例外を Exception でまとめず、種類ごとに except を分けて書くべき
- ログには f 文字列ではなく、% 形式の引数で値を渡すべき
解説
ログは多くの人や外部のサービスが読み、長く保存されるので、パスワードを書くとログを見られる人全員に知られる。メールアドレスのような個人情報も、必要な範囲に絞るか伏せる。traceback.format_exc() を応答で返すと、ファイルのパス、ライブラリの種類と版、SQL 文など、攻撃の手がかりになる内部の情報が利用者に見える。利用者には一般的なエラーの文面と問い合わせ用の ID だけを返し、詳細はサーバー側のログに残す。ログのレベルや except の分け方、ログの書式は改善の話で、漏えいより優先する指摘ではない。
参考: cheatsheetseries.owasp.org
この問題を含む セキュリティ のテストを制限時間つきで解く
セキュリティクイズへ