web-dev-qa-db-ja.com

HTTPS POSTリクエストヘッダーとリクエスト本文の比較

POSTリクエストヘッダーとPOSTリクエスト-のAPIキーなど、機密データを配置することの間にセキュリティの違いはありますか? body APIサーバーがHTTPSのみであると想定していますか?

AuthorizationヘッダーまたはカスタムX-API-KEYヘッダーにAPIキーが頻繁に表示されますが、キーをヘッダーに配置すると、キーのセキュリティレベルが実際に向上しますか、それとも厳密にAPI設計規則ですか?

18
pxwise

トランスポート自体が保護されている場合(httpsなど)、攻撃者はデータを盗聴できません。ただし、サーバー側でログに記録され、後でサーバーが侵害されるか、セキュリティリークによってログファイルが一般に公開される可能性があります。このようなログファイルには通常URLが含まれており、カスタムログ形式で指定されている場合、User-Agent、Referer、その他のヘッダーなどのヘッダーからの他の行が含まれている可能性があります。したがって、これらのAPIキーがログに記録されないことを確認しない限り、これらのAPIキーをリクエストヘッダーに入れるのは悪い考えです。

リクエストの本文にキーを配置することに対する反対論は、CSRFリクエストとして使用しやすいキーを含む単純なHTTPフォームを作成できるようになったことです。代わりにAPIキーをヘッダーとして含める場合、攻撃者はXHRリクエストを実行できる必要があり、 [〜#〜] cors [〜#〜] の制限を受けます。

キーをURLに含めないもう1つの理由は、次のリクエストのリファラーヘッダーにキーが含まれる可能性があることです。また、URLは通常、ブラウザーの履歴に含まれているため、侵害される可能性のある別の場所があります。これは通常のブラウザリクエストにのみ関連します。つまり、XHRまたはRESTアプリケーションによって行われたリクエストは影響を受けません。

「ヘッダー」の意味に関するいくつかの説明:「ヘッダー」という名前を使用して、HTTPメッセージの最初の部分と本文を区別することがあります。この場合、URLはヘッダー(要求行)の一部です。他の場合には、ヘッダー(複数形)について話し、「フィールド:値」のペアのみを意味します。つまり、URLを含むリクエスト行は含まれません。質問でどの意味が使用されているのかは完全には明確ではないので、両方を詳しく説明します。

15
Steffen Ullrich

私はそれをHTTPヘッダーで使用することには大きなセキュリティ上の利点があるとは思いません(HTTPリクエストを開始するリクエスト行で送信されるURLは含まれません。ブラウザーの履歴にログが記録されていることをよりよく認識する必要があります)またはサーバーログ)とPOSTリクエスト本文に含まれています。

「AuthorizationヘッダーまたはカスタムX-API-KEYヘッダー」でキーを送信する利点は、APIの複数のメソッド間の分離と一貫性です。つまり、APIが使用するヘッダーフィールドをチェックすることで、GET、POST、PUTなどのメソッドの同じサーバーコードで認証を処理できます。さらに、ユーザーがAPIリクエストの一部としてリクエスト本文で他のPOST/PUTデータを送信する必要がある場合、データは認証データとは別に保持されます。

5
dr jimbob