知識マップ: 情報処理安全確保支援士 令和5年秋 午後問1解説 ── 16件のレビューが2件しか表示されない格納型XSS

記事「情報処理安全確保支援士 令和5年秋 午後問1解説 ── 16件のレビューが2件しか表示されない格納型XSS」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。

この問題の脆弱性は格納型XSSで、攻撃者の文字列がサーバーに保存され以後の全閲覧者に配られた点が反射型・DOM Based XSSとの分かれ目です。入力文字数制限・入力検証・CSRFトークンはいずれもこの攻撃を防げず、根本的解決である出力時エスケープと、保険的対策のHttpOnly属性・アップロードファイルの形式確認だけが実際に効きました。盗まれたセッションIDは外部通信なしに自サイトのアイコン画像として持ち出されたため、CSPのconnect-src制限は効かず、インラインスクリプトの実行を止めるscript-src制限だけが有効です。同一オリジンポリシーとcookieのドメイン分離、withCredentialsの既定値、CORSの設定が、この攻撃を別ドメインから仕掛けても成立しない理由を説明します。

情報処理安全確保支援士 令和5年秋午後問1(格納型XSS)の知識マップ格納型XSSと反射型XSS・DOM Based XSSの分かれ目、出力時エスケープと入力時エスケープ・入力文字数制限・入力検証・CSRFトークンとの違い、HttpOnly属性やContent Security PolicyのscriptSrc/connectSrcが効く範囲、同一オリジンポリシー・CORS・SameSite・withCredentialsが別ドメインからの攻撃を止める仕組み、アップロードファイルの形式確認・再エンコードの限界の関係を示す図防止する防止する用いるのは非推奨用いるのは非推奨用いるのは非推奨用いるのは非推奨防止する原因になり得る防止するに保存される原因になり得る用いるのは非推奨防止する利用する利用する防止する用いるのは非推奨防止する前提とする原因になり得る両立しない原因になり得る軽減する軽減する前提とする格納型XSS出力時エスケープ反射型XSS入力時エスケープSQLインジェクション入力文字数制限入力値の検証(バリデーション)プレースホルダ(プリペアドステートメント)セッションクッキー窃取HttpOnly属性セッションIDアカウント乗っ取りCSRFトークンクロスサイトリクエストフォージェリ(CSRF)Content Security Policy(CSP)CSPのscript-srcディレクティブCSPのconnect-srcディレクティブ同一オリジンポリシー別オリジンからのスクリプトによる攻撃withCredentialsCORS(オリジン間リソース共有)cookieのSameSite属性アップロードファイルの形式確認アップロード画像の再エンコードDOM Based XSSブラウザ側のシンク

概念間の関係(全25件)

図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。

主要概念の定義

格納型XSS
攻撃者の文字列がサーバー側に保存され、以後そのページを開いた全員のHTMLに出力されて実行されるクロスサイトスクリプティング。脆弱な出力箇所(シンク)はサーバー側の出力処理にある。
出力時エスケープ
データがHTML等として出力される直前に、出力先の文法に応じてエスケープ処理を施すこと。IPAがXSSの根本的解決として挙げる対策。
入力時エスケープ
データを受け取った時点でエスケープ処理を施すこと。出力先が未確定なため二重エスケープやデータ破壊を招き、XSS・SQLインジェクションいずれの対策としても不適切とされる。
入力文字数制限
入力欄1件あたりの文字数を制限する仕様上の制約。投稿回数までは制限しないため、分割投稿によって回避され得る。
入力値の検証(バリデーション)
仕様上ありえない値を受け付けない検証処理。IPAは、幅広い文字種を許す自由記述項目ではXSS対策としての有効性が限定的であり、この方法に頼ることは推奨されないとしている。
プレースホルダ(プリペアドステートメント)
SQL文の組み立てを全てプレースホルダで実装する実装方式。IPAがSQLインジェクションの根本的解決として挙げる対策で、原理的に脆弱性が生じ得ないとされる。
HttpOnly属性
cookieのスコープをHTTPリクエストに限定し、スクリプトからdocument.cookie等の非HTTP APIでアクセスできなくするcookie属性。
セッションID
ログイン後にサーバーが払い出す、以後の要求を同一利用者として扱うための識別子。多くの実装でcookieに格納される。
CSRFトークン
別サイトからの勝手なリクエストを弾くために、正規の画面からのみ払い出されるトークン。同一オリジンで動くスクリプトは正規の手順でトークンを取得できるため、XSSは防げない。
Content Security Policy(CSP)
ブラウザに対しスクリプトの実行元や通信先などを制限させるHTTPレスポンスヘッダーによるポリシー機構。
CSPのscript-srcディレクティブ
スクリプトの実行を許可する送信元を指定するCSPディレクティブ。'unsafe-inline'を許可しない構成であれば、埋め込まれたインラインスクリプトは実行されない。
CSPのconnect-srcディレクティブ
fetch/XMLHttpRequest等の通信先を制限するCSPディレクティブ。'self'など同一オリジンを許可する一般的な指定では、同一オリジン宛ての情報持ち出しは止められない。
同一オリジンポリシー
スクリプトが別オリジンのcookieやレスポンスを読めないようにするブラウザの基本原則。
withCredentials
XMLHttpRequest/fetchでクロスオリジンリクエストにcookieを添付するかを指定するプロパティ。既定はfalseで、クロスオリジンのリクエストにcookieは付かない。
cookieのSameSite属性
cookieをクロスサイトのリクエストに添付するかを制御する属性。未指定はLaxとして扱われ、既定ではクロスサイト送信されない。
CORS(オリジン間リソース共有)
サーバーがAccess-Control-Allow-Origin等のヘッダーで、別オリジンのスクリプトにレスポンスの読み取りを許可する仕組み。credentials付きで許可する場合は送信元オリジンを具体的に指定する必要がある。
アップロードファイルの形式確認
アップロードされたファイルを、送信側が申告した拡張子やContent-Typeではなく中身で形式を確認すること。生のテキストの持ち出しは止められるが、正当な画像のメタデータに隠す手口は通り得る。
アップロード画像の再エンコード
アップロードされた画像をサーバー側で再エンコードして配信し、元のバイト列をそのまま残さない対策。ピクセルとして符号化された情報までは消せない。
DOM Based XSS
ブラウザ上のJavaScriptがinnerHTMLへの代入やevalなどを通じて値を実行可能なコードに変えてしまう類型のクロスサイトスクリプティング。脆弱なシンクはブラウザ側にある。

機械可読データ

このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。