説明
パスワード、APIキー、シークレット、アクセストークンなどをURLのクエリ文字列で受け取ると、ブラウザーの履歴、サーバーのアクセスログ、プロキシ、キャッシュ、Refererヘッダーに値が残るおそれがあります。
想定される影響
- ログや監視システムを通じて、アカウントのパスワードやトークンが漏れる可能性があります。
- Refererヘッダーや共有されたリンクから、第三者に機密情報が渡るおそれがあります。
対処方法
機密性のある値はHTTPSリクエストの本文や認証ヘッダーで送り、URLには識別子や機密性のない絞り込み条件だけを含めてください。
例
変更前
csharp
[HttpGet("reset")]
public IActionResult Reset([FromQuery] string newPassword)
{
return Ok();
}
変更後
csharp
[HttpPost("reset")]
public IActionResult Reset([FromBody] ResetPasswordRequest request)
{
return Ok();
}
解説:
- 変更前: URLのクエリパラメーターからパスワード、APIキー、シークレット、Bearerトークンを受け取ると、ブラウザー履歴、アクセスログ、プロキシ、キャッシュ、Refererヘッダーを通じて漏れるおそれがあります。
- 変更後: 機密性のある値はHTTPSリクエストの本文やヘッダーで受け取り、URLにシークレットを含めません。