URLに含まれる機密情報

C#のURLに含まれる機密情報

説明

パスワード、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にシークレットを含めません。

参考資料