1

同じ値のアプリケーションで重複したヘッダーが使用される場合、私は応答を見つけました。誰も私にそれを教えてもらえますか?それは良いプログラミングの練習ですか、それともセキュリティの観点か何かのために使われていますか?重複した応答ヘッダーを同じ値で使用するとよいですか?

 
    HTTP/1.1 200 
    Accept-Ranges: bytes 
    Cache-Control: no-cache, must-revalidate, private 
    Content-Type: text/html 
    Date: Mon, 20 Nov 2017 04:08:51 GMT 
    Expires: 0 
    Last-Modified: Thu, 16 Nov 2017 14:04:48 GMT 
    Pragma: 
    Public-Key-Pins: pin-sha256="5w0XrTCAbsVO7vTngDViNHPutlvB43qYionPbpV2ky0="; 
    max-age=5184000; includeSubDomains; 
    Server: Any 
    Set-Cookie: ********************* httponly; secure; path=/ 
    Strict-Transport-Security: max-age=31536000 ; includeSubDomains 
    Strict-Transport-Security: max-age=31536000; includeSubDomains 
    X-Content-Type-Options: nosniff 
    X-Content-Type-Options: nosniff 
    X-Frame-Options: SAMEORIGIN 
    X-Frame-Options: SAMEORIGIN 
    X-XSS-Protection: 1; mode=block 
    Content-Length: 559 
    Connection: Close 

このアプリケーションは、厳格な-トランスポートセキュリティ、同じ値を持つX-フレーム・オプションヘッダを重複X-Content-Typeの-オプションヘッダを使用しています。

+0

ここにクロスポストされています:https://security.stackexchange.com/questions/175840/is-it-fine-to-use-duplicate-response-header-with-same-value – Lekensteyn

答えて

1

これはプログラミング/設定エラーです。 RFC 7230 (Section 3.2.2)は言う:その ヘッダフィールドの全体のフィールド値のいずれかがコンマ区切りのリストとして定義されていない限り

送信者が[すなわち、#(メッセージ内の同じフィールド 名前の複数のヘッダフィールドを生成してはいけません値)]] 、またはヘッダーフィールドは、よく知られている例外です(後述)。

したがって、このような複数のヘッダを使用して:

Strict-Transport-Security: max-age=31536000 ; includeSubDomains 
Strict-Transport-Security: max-age=31536000; includeSubDomains 

は未定義の動作です。同じセクションは言う:

受信者が一つに同じフィールド 名前の複数のヘッダフィールドを組み合わせることができる:各後続を付加することにより、メッセージの セマンティクスを変更することなく、「フィールド名のフィールド値」対フィールドの値を にコンマで区切って順番に組み合わせます。

したがって、上記のヘッダーの1つの可能な解釈は次のとおりです。

Strict-Transport-Security: max-age=31536000 ; includeSubDomains, max-age=31536000; includeSubDomains 

https://tools.ietf.org/html/rfc6797#section-6.1に応じて有効な構文ではありませんし、拒否されてしまうかもしれません(その結果、HSTSポリシーが適用されていない)が。

すべての実装がこの特定の動作に従うとは限らないことに注意してください。例えば、PythonのHTTPライブラリは、ヘッダだけのリストを返し、上記の場合には、それは次のようになります。実装に応じ

[ 
    # ... 
    ('Strict-Transport-Security', 'max-age=31536000 ; includeSubDomains'), 
    ('Strict-Transport-Security', 'max-age=31536000; includeSubDomains') 
    # ... 
] 

、少なくともこれら三つの行動が可能です。

  • マージRFC 7230で指定されているように、コンマで区切られたヘッダーです。
  • 最初のヘッダーの一致を使用します。
  • 最後のヘッダーの一致を使用します。

妥当性検査と使用の間の解釈の不一致は、おそらくHSTSヘッダーにとってそれほど重大ではありませんが、攻撃につながる可能性があります。

+1

[RFC 6797]( https://tools.ietf.org/html/rfc6797)ヘッダーが複数回使用できるかどうかはわかりません[RFC 2616](https://www.ietf.org/rfc/rfc2616.txt) 4。2つの* "同じフィールド名を持つ複数のメッセージヘッダーフィールドは、 がメッセージ内に存在する場合、そのフィールドのフィールド値全体がコンマで区切られたリスト" *として定義されています。 HSTSヘッダーはカンマで区切られたリストとして定義されていないため、複数回出現することはできません。そしてそれがそうするならば、折り畳むための規則も意味しない、進める方法に関する規則はありません。 –

+0

ありがとうございます、@ StteenUllrichとLekensteynは今それがはっきりしています。 –

+0

@SteffenUllrich RFC 2616は廃止されました。以前はRFC 7230を参照していました(これは後継です)。今私は答えに関連するセクションを追加しました。提案に感謝します。あなたの見積もりは送付者に関するものであることに注意してください。受取人はまだヘッダーを自由に組み合わせることができます(*受取人が結合することもあります)* – Lekensteyn

関連する問題