情報セキュリティ

基本情報技術者試験HTTPセキュリティヘッダ」の問題

情報セキュリティ情報セキュリティ難易度:normal
あるWebサービスでは出力時のエスケープを進めているが、開発規模が大きく、万一エスケープ漏れが残った場合にスクリプト実行による被害を抑える多層防御を追加したい。ブラウザ側で、読み込み・実行を許可するスクリプトの取得元を制限する仕組みを導入したい。この目的に適した応答ヘッダはどれか。
Content-Security-Policy を設定し、読み込んでよいスクリプトの出どころを宣言で限る。
Content-Type を text/plain に固定し、サーバが返す応答をすべて単なる文字データとしてブラウザに解釈させる。
Cache-Control を no-store に設定し、サーバの応答がブラウザや経路上に残らないようにする。
Accept-Language を ja に固定し、サーバが返す内容の表示を日本語に統一するようにする。
正解
Content-Security-Policy を設定し、読み込んでよいスクリプトの出どころを宣言で限る。

Content-Security-Policy(CSP)は、ブラウザに対しスクリプトやスタイル等の読み込みを許可する取得元を宣言し、それ以外の実行を抑止する応答ヘッダである。出力エスケープを主対策としつつ、万一漏れが残ってもインラインスクリプトの実行や信頼外ドメインからの読込みを制限でき、XSS被害を低減する多層防御として機能する。目的に適合する。

?選択肢ごとの解説

ア ○Content-Security-Policy(CSP)は、ブラウザに対しスクリプトやスタイル等の読み込みを許可する取得元を宣言し、それ以外の実行を抑止する応答ヘッダである。出力エスケープを主対策としつつ、万一漏れが残ってもインラインスクリプトの実行や信頼外ドメインからの読込みを制限でき、XSS被害を低減する多層防御として機能する。目的に適合する。
イ ×Content-Typeはコンテンツの種類を伝えるヘッダで、これをtext/plain固定にすると正常なHTMLが表示できなくなり、スクリプト取得元の制限という目的も果たさない。
ウ ×Cache-Controlはキャッシュ動作を制御するヘッダで、機微情報のキャッシュ抑止には有効だが、スクリプトの取得元制限とは無関係である。
エ ×Accept-Languageは要求側が希望する言語を伝えるヘッダで、応答のセキュリティ制御やスクリプト取得元の制限とは関係がない。

くわしく

XSS対策は『出力エスケープ(主対策)+CSP(多層防御)』の組合せが定石である。CSPは取得元の制限やインライン実行の禁止により、コードに残った漏れの影響を緩和する保険であり、単独の主対策ではなく深層防御の一枚として位置づける点が理解の要である。

本番での押さえどころ

試験のコツ

『スクリプトの取得元をブラウザ側で制限する多層防御』はCSP(Content-Security-Policy)。出力エスケープを補う保険と位置づける。

覚え方

CSPは『このサイトのスクリプトはここからだけ』という入場制限リスト。漏れがあっても素性の悪い者を入れない。

よくある誤り

CSPをXSSの唯一の対策と誤認したり、他の用途のヘッダ(Content-Type等)と混同する。CSPは取得元制限による多層防御である。

情報セキュリティの他の問題

この問題を、AIの8-ways解説つきで。

基本情報技術者試験の演習を、一問ごとに「なぜ」まで。まずは無料で。

無料ではじめる →

ukamiru 過去問 · 基本情報技術者試験 · fe-b-sec-0105

【基本情報技術者試験】HTTPセキュリティヘッダの問題 — 解答・解説|ukamiru 過去問