web-dev-qa-db-ja.com

JSON Content-Type文字セットを指定するメリットはありますか?

OWASP Application Security Verification Standard によると:

V11.3すべてのHTTP応答に、安全な文字セット(UTF-8など)を指定するコンテンツタイプヘッダーが含まれていることを確認します。

application/json Media TypeのRFC によると:

JSONテキストはUnicodeでエンコードする必要があります。デフォルトのエンコーディングはUTF-8です。

JSONテキストの最初の2文字は常にASCII characters [RFC0020]であるため、オクテットストリームがUTF-8、UTF-16(BEまたはLE)であるかどうかを判別できます。または最初の4つのオクテットのヌルのパターンを調べることによるUTF-32(BEまたはLE)。

エンコーディングが実際にUTF-8の場合、これは、Content-Typeだけでなくapplication/json; charset=utf-8application/jsonヘッダーを設定してもセキュリティ上の利点がないことを意味します。

application/jsonのOWASPルールに例外を設けることは妥当ですか?

4
oggmonster

最大のリスクは エンコーディングをUTF-7として自動検出しようとする古いバージョンのInternet Explorer - Codepage Sniffing と呼ばれます。

Internet ExplorerはこれをWebページに対してのみ行い、AJAXリクエストに対しては行いません。したがって、JSONリクエストは安全である必要があります。さらに、JSONリクエストはコンテンツをページに直接レンダリングしません-それらはは、DOMを操作するためにJavaScript処理を必要とするため、HTMLで事前にエンコードされていると思われるデータを取得する場合にのみ問題になります。したがって、JSONデータがクライアントでHTMLエンコードされている場合、ページのエンコードは優先され、+ADw-文字シーケンスが山括弧に変換されることはありません。これは、リスクがUTF-7に存在する場所です。

したがって、charset=utf-8を指定する必要があるのは、Content-Type: text/htmlページに対してのみです。

2
SilverlightFox