知識マップ: 情報処理安全確保支援士 令和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の設定が、この攻撃を別ドメインから仕掛けても成立しない理由を説明します。
flowchart LR
accTitle: 情報処理安全確保支援士 令和5年秋午後問1(格納型XSS)の知識マップ
accDescr: 格納型XSSと反射型XSS・DOM Based XSSの分かれ目、出力時エスケープと入力時エスケープ・入力文字数制限・入力検証・CSRFトークンとの違い、HttpOnly属性やContent Security PolicyのscriptSrc/connectSrcが効く範囲、同一オリジンポリシー・CORS・SameSite・withCredentialsが別ドメインからの攻撃を止める仕組み、アップロードファイルの形式確認・再エンコードの限界の関係を示す図
stored_xss["格納型XSS"]
output_escaping["出力時エスケープ"]
reflected_xss["反射型XSS"]
input_time_escaping["入力時エスケープ"]
sql_injection["SQLインジェクション"]
character_limit_validation["入力文字数制限"]
input_validation["入力値の検証(バリデーション)"]
prepared_statement["プレースホルダ(プリペアドステートメント)"]
session_cookie_theft["セッションクッキー窃取"]
http_only_cookie["HttpOnly属性"]
session_id["セッションID"]
account_takeover["アカウント乗っ取り"]
csrf_token["CSRFトークン"]
csrf["クロスサイトリクエストフォージェリ(CSRF)"]
content_security_policy["Content Security Policy(CSP)"]
csp_script_src["CSPのscript-srcディレクティブ"]
csp_connect_src["CSPのconnect-srcディレクティブ"]
same_origin_policy["同一オリジンポリシー"]
cross_origin_script_attack["別オリジンからのスクリプトによる攻撃"]
withcredentials["withCredentials"]
cors["CORS(オリジン間リソース共有)"]
samesite_cookie["cookieのSameSite属性"]
file_upload_type_check["アップロードファイルの形式確認"]
file_reencoding["アップロード画像の再エンコード"]
dom_based_xss["DOM Based XSS"]
client_side_sink["ブラウザ側のシンク"]
output_escaping -->|"防止する"| stored_xss
output_escaping -->|"防止する"| reflected_xss
input_time_escaping -->|"用いるのは非推奨"| stored_xss
input_time_escaping -->|"用いるのは非推奨"| sql_injection
character_limit_validation -->|"用いるのは非推奨"| stored_xss
input_validation -->|"用いるのは非推奨"| stored_xss
prepared_statement -->|"防止する"| sql_injection
stored_xss -.->|"原因になり得る"| session_cookie_theft
http_only_cookie -->|"防止する"| session_cookie_theft
session_id -.->|"に保存される"| http_only_cookie
stored_xss -->|"原因になり得る"| account_takeover
csrf_token -->|"用いるのは非推奨"| stored_xss
csrf_token -->|"防止する"| csrf
content_security_policy -->|"利用する"| csp_script_src
content_security_policy -->|"利用する"| csp_connect_src
csp_script_src -.->|"防止する"| stored_xss
csp_connect_src -.->|"用いるのは非推奨"| stored_xss
same_origin_policy -->|"防止する"| cross_origin_script_attack
withcredentials -->|"前提とする"| cors
withcredentials -.->|"原因になり得る"| account_takeover
samesite_cookie -.->|"両立しない"| withcredentials
cors -.->|"原因になり得る"| account_takeover
file_upload_type_check -.->|"軽減する"| stored_xss
file_reencoding -.->|"軽減する"| stored_xss
dom_based_xss -->|"前提とする"| client_side_sink
概念間の関係(全25件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- 出力時エスケープは格納型XSSを防ぎます。
- 出力時エスケープは反射型XSSを防ぎます。
- 入力時エスケープを格納型XSSに用いることは推奨されません。
- 入力時エスケープをSQLインジェクションに用いることは推奨されません。
- 入力文字数制限を格納型XSSに用いることは推奨されません。
- 入力値の検証(バリデーション)を格納型XSSに用いることは推奨されません。
- プレースホルダ(プリペアドステートメント)はSQLインジェクションを防ぎます。
- 格納型XSSはセッションクッキー窃取の原因になることがあります。
- HttpOnly属性はセッションクッキー窃取を防ぎます。
- セッションIDはHttpOnly属性に保存されます。
- 格納型XSSはアカウント乗っ取りの原因になることがあります。
- CSRFトークンを格納型XSSに用いることは推奨されません。
- CSRFトークンはクロスサイトリクエストフォージェリ(CSRF)を防ぎます。
- Content Security Policy(CSP)はCSPのscript-srcディレクティブを利用します。
- Content Security Policy(CSP)はCSPのconnect-srcディレクティブを利用します。
- CSPのscript-srcディレクティブは格納型XSSを防ぎます。
- CSPのconnect-srcディレクティブを格納型XSSに用いることは推奨されません。
- 同一オリジンポリシーは別オリジンからのスクリプトによる攻撃を防ぎます。
- withCredentialsはCORS(オリジン間リソース共有)を前提とします。
- withCredentialsはアカウント乗っ取りの原因になることがあります。
- cookieのSameSite属性はwithCredentialsと両立しません。
- CORS(オリジン間リソース共有)はアカウント乗っ取りの原因になることがあります。
- アップロードファイルの形式確認は格納型XSSを軽減します。
- アップロード画像の再エンコードは格納型XSSを軽減します。
- DOM Based XSSはブラウザ側のシンクを前提とします。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。