@prefix schema: <https://schema.org/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ks: <https://comcomponent.com/vocab/> .

<https://comcomponent.com/blog/sc-exam-r5a-pm-q1-stored-xss/#article>
    schema:about <https://comcomponent.com/knowledge/stored-xss/>, <https://comcomponent.com/knowledge/output-escaping/> ;
    schema:mentions <https://comcomponent.com/knowledge/reflected-xss/>, <https://comcomponent.com/knowledge/dom-based-xss/>, <https://comcomponent.com/knowledge/csrf-token/>, <https://comcomponent.com/knowledge/http-only-cookie/>, <https://comcomponent.com/knowledge/content-security-policy/>, <https://comcomponent.com/knowledge/csp-script-src/>, <https://comcomponent.com/knowledge/csp-connect-src/>, <https://comcomponent.com/knowledge/same-origin-policy/>, <https://comcomponent.com/knowledge/cors/>, <https://comcomponent.com/knowledge/session-cookie-theft/>, <https://comcomponent.com/knowledge/account-takeover/>, <https://comcomponent.com/knowledge/sql-injection/>, <https://comcomponent.com/knowledge/prepared-statement/> .

<https://comcomponent.com/knowledge/stored-xss/> a skos:Concept ;
    skos:prefLabel "格納型XSS"@ja ;
    skos:definition "攻撃者の文字列がサーバー側に保存され、以後そのページを開いた全員のHTMLに出力されて実行されるクロスサイトスクリプティング。脆弱な出力箇所(シンク)はサーバー側の出力処理にある。"@ja ;
    skos:altLabel "Stored XSS" ;
    skos:altLabel "蓄積型XSS"@ja ;
    ks:mayCause <https://comcomponent.com/knowledge/account-takeover/> .

<https://comcomponent.com/knowledge/output-escaping/> a skos:Concept ;
    skos:prefLabel "出力時エスケープ"@ja ;
    skos:definition "データがHTML等として出力される直前に、出力先の文法に応じてエスケープ処理を施すこと。IPAがXSSの根本的解決として挙げる対策。"@ja ;
    skos:altLabel "出力エスケープ"@ja ;
    ks:prevents <https://comcomponent.com/knowledge/stored-xss/> ;
    ks:prevents <https://comcomponent.com/knowledge/reflected-xss/> .

<https://comcomponent.com/knowledge/reflected-xss/> a skos:Concept ;
    skos:prefLabel "反射型XSS"@ja ;
    skos:definition "攻撃者が用意したURLのパラメータなど、そのリクエスト自身に含まれる文字列がサーバーの出力処理でそのままHTMLに埋め込まれて実行されるクロスサイトスクリプティング。"@ja ;
    skos:altLabel "Reflected XSS" .

<https://comcomponent.com/knowledge/input-time-escaping/> a skos:Concept ;
    skos:prefLabel "入力時エスケープ"@ja ;
    skos:definition "データを受け取った時点でエスケープ処理を施すこと。出力先が未確定なため二重エスケープやデータ破壊を招き、XSS・SQLインジェクションいずれの対策としても不適切とされる。"@ja ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/stored-xss/> ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/sql-injection/> .

<https://comcomponent.com/knowledge/sql-injection/> a skos:Concept ;
    skos:prefLabel "SQLインジェクション"@ja ;
    skos:definition "利用者からの入力がSQL文の構造を書き換えてしまう脆弱性。"@ja ;
    skos:altLabel "SQLi" .

<https://comcomponent.com/knowledge/character-limit-validation/> a skos:Concept ;
    skos:prefLabel "入力文字数制限"@ja ;
    skos:definition "入力欄1件あたりの文字数を制限する仕様上の制約。投稿回数までは制限しないため、分割投稿によって回避され得る。"@ja ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/stored-xss/> .

<https://comcomponent.com/knowledge/input-validation/> a skos:Concept ;
    skos:prefLabel "入力値の検証(バリデーション)"@ja ;
    skos:definition "仕様上ありえない値を受け付けない検証処理。IPAは、幅広い文字種を許す自由記述項目ではXSS対策としての有効性が限定的であり、この方法に頼ることは推奨されないとしている。"@ja ;
    skos:altLabel "入力チェック"@ja ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/stored-xss/> .

<https://comcomponent.com/knowledge/prepared-statement/> a skos:Concept ;
    skos:prefLabel "プレースホルダ(プリペアドステートメント)"@ja ;
    skos:definition "SQL文の組み立てを全てプレースホルダで実装する実装方式。IPAがSQLインジェクションの根本的解決として挙げる対策で、原理的に脆弱性が生じ得ないとされる。"@ja ;
    skos:altLabel "静的プレースホルダ"@ja ;
    ks:prevents <https://comcomponent.com/knowledge/sql-injection/> .

<https://comcomponent.com/knowledge/session-cookie-theft/> a skos:Concept ;
    skos:prefLabel "セッションクッキー窃取"@ja ;
    skos:definition "ログイン後に発行されたセッションクッキーをマルウェアやXSSで盗み、認証を経ずになりすます攻撃。ログインの瞬間を守る認証方式では防げない。"@ja ;
    skos:altLabel "セッションハイジャック"@ja .

<https://comcomponent.com/knowledge/http-only-cookie/> a skos:Concept ;
    skos:prefLabel "HttpOnly属性"@ja ;
    skos:definition "cookieのスコープをHTTPリクエストに限定し、スクリプトからdocument.cookie等の非HTTP APIでアクセスできなくするcookie属性。"@ja ;
    skos:altLabel "HttpOnly Cookie" ;
    ks:prevents <https://comcomponent.com/knowledge/session-cookie-theft/> .

<https://comcomponent.com/knowledge/session-id/> a skos:Concept ;
    skos:prefLabel "セッションID"@ja ;
    skos:definition "ログイン後にサーバーが払い出す、以後の要求を同一利用者として扱うための識別子。多くの実装でcookieに格納される。"@ja .

<https://comcomponent.com/knowledge/account-takeover/> a skos:Concept ;
    skos:prefLabel "アカウント乗っ取り"@ja ;
    skos:definition "第三者が正規利用者になりすましてアカウントを制御できるようになること。"@ja .

<https://comcomponent.com/knowledge/csrf-token/> a skos:Concept ;
    skos:prefLabel "CSRFトークン"@ja ;
    skos:definition "別サイトからの勝手なリクエストを弾くために、正規の画面からのみ払い出されるトークン。同一オリジンで動くスクリプトは正規の手順でトークンを取得できるため、XSSは防げない。"@ja ;
    skos:altLabel "アップロードトークン"@ja ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/stored-xss/> ;
    ks:prevents <https://comcomponent.com/knowledge/csrf/> .

<https://comcomponent.com/knowledge/csrf/> a skos:Concept ;
    skos:prefLabel "クロスサイトリクエストフォージェリ(CSRF)"@ja ;
    skos:definition "別サイトに置かれた偽のフォームなどから、利用者の意図しないリクエストを正規サイトへ勝手に送らせる攻撃。"@ja ;
    skos:altLabel "CSRF" .

<https://comcomponent.com/knowledge/content-security-policy/> a skos:Concept ;
    skos:prefLabel "Content Security Policy(CSP)"@ja ;
    skos:definition "ブラウザに対しスクリプトの実行元や通信先などを制限させるHTTPレスポンスヘッダーによるポリシー機構。"@ja ;
    skos:altLabel "CSP" ;
    ks:uses <https://comcomponent.com/knowledge/csp-script-src/> ;
    ks:uses <https://comcomponent.com/knowledge/csp-connect-src/> .

<https://comcomponent.com/knowledge/csp-script-src/> a skos:Concept ;
    skos:prefLabel "CSPのscript-srcディレクティブ"@ja ;
    skos:definition "スクリプトの実行を許可する送信元を指定するCSPディレクティブ。'unsafe-inline'を許可しない構成であれば、埋め込まれたインラインスクリプトは実行されない。"@ja ;
    skos:altLabel "script-src" .

<https://comcomponent.com/knowledge/csp-connect-src/> a skos:Concept ;
    skos:prefLabel "CSPのconnect-srcディレクティブ"@ja ;
    skos:definition "fetch/XMLHttpRequest等の通信先を制限するCSPディレクティブ。'self'など同一オリジンを許可する一般的な指定では、同一オリジン宛ての情報持ち出しは止められない。"@ja ;
    skos:altLabel "connect-src" .

<https://comcomponent.com/knowledge/same-origin-policy/> a skos:Concept ;
    skos:prefLabel "同一オリジンポリシー"@ja ;
    skos:definition "スクリプトが別オリジンのcookieやレスポンスを読めないようにするブラウザの基本原則。"@ja ;
    skos:altLabel "Same-Origin Policy" ;
    skos:altLabel "SOP" ;
    ks:prevents <https://comcomponent.com/knowledge/cross-origin-script-attack/> .

<https://comcomponent.com/knowledge/cross-origin-script-attack/> a skos:Concept ;
    skos:prefLabel "別オリジンからのスクリプトによる攻撃"@ja ;
    skos:definition "同じ攻撃スクリプトを被害サイトとは別のオリジンに置いて仕掛ける形の攻撃。同一オリジンで動くXSSとは成立条件が異なり、同一オリジンポリシーやcookieのドメイン分離に阻まれる。"@ja ;
    skos:altLabel "クロスオリジンの攻撃スクリプト"@ja .

<https://comcomponent.com/knowledge/withcredentials/> a skos:Concept ;
    skos:prefLabel "withCredentials"@ja ;
    skos:definition "XMLHttpRequest/fetchでクロスオリジンリクエストにcookieを添付するかを指定するプロパティ。既定はfalseで、クロスオリジンのリクエストにcookieは付かない。"@ja ;
    ks:requires <https://comcomponent.com/knowledge/cors/> .

<https://comcomponent.com/knowledge/cors/> a skos:Concept ;
    skos:prefLabel "CORS(オリジン間リソース共有)"@ja ;
    skos:definition "サーバーがAccess-Control-Allow-Origin等のヘッダーで、別オリジンのスクリプトにレスポンスの読み取りを許可する仕組み。credentials付きで許可する場合は送信元オリジンを具体的に指定する必要がある。"@ja ;
    skos:altLabel "Cross-Origin Resource Sharing" .

<https://comcomponent.com/knowledge/samesite-cookie/> a skos:Concept ;
    skos:prefLabel "cookieのSameSite属性"@ja ;
    skos:definition "cookieをクロスサイトのリクエストに添付するかを制御する属性。未指定はLaxとして扱われ、既定ではクロスサイト送信されない。"@ja ;
    skos:altLabel "SameSite" .

<https://comcomponent.com/knowledge/file-upload-type-check/> a skos:Concept ;
    skos:prefLabel "アップロードファイルの形式確認"@ja ;
    skos:definition "アップロードされたファイルを、送信側が申告した拡張子やContent-Typeではなく中身で形式を確認すること。生のテキストの持ち出しは止められるが、正当な画像のメタデータに隠す手口は通り得る。"@ja ;
    skos:altLabel "ファイル形式チェック"@ja .

<https://comcomponent.com/knowledge/file-reencoding/> a skos:Concept ;
    skos:prefLabel "アップロード画像の再エンコード"@ja ;
    skos:definition "アップロードされた画像をサーバー側で再エンコードして配信し、元のバイト列をそのまま残さない対策。ピクセルとして符号化された情報までは消せない。"@ja .

<https://comcomponent.com/knowledge/dom-based-xss/> a skos:Concept ;
    skos:prefLabel "DOM Based XSS"@ja ;
    skos:definition "ブラウザ上のJavaScriptがinnerHTMLへの代入やevalなどを通じて値を実行可能なコードに変えてしまう類型のクロスサイトスクリプティング。脆弱なシンクはブラウザ側にある。"@ja ;
    skos:altLabel "DOMベースXSS"@ja ;
    ks:requires <https://comcomponent.com/knowledge/client-side-sink/> .

<https://comcomponent.com/knowledge/client-side-sink/> a skos:Concept ;
    skos:prefLabel "ブラウザ側のシンク"@ja ;
    skos:definition "攻撃文字列を実行可能なコードに変える箇所のうち、ブラウザ上のJavaScript側にあるもの(innerHTMLへの代入、eval、document.writeなど)。XSSの類型判定はシンクがサーバー側かブラウザ側かで決まる。"@ja ;
    skos:altLabel "クライアント側シンク"@ja ;
    skos:altLabel "innerHTMLなどのシンク"@ja .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/output-escaping/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/stored-xss/> ;
    schema:description "レビュータイトルを出力する前にエスケープ処理を施せば、投稿された文字列はHTMLとして解釈されなくなり、そもそもスクリプトが実行されない。IPAが示す本問の解答例であり根本的解決"@ja ;
    ks:evidence <https://www.ipa.go.jp/shiken/mondai-kaiotu/ps6vr70000010d6y-att/2023r05a_sc_pm_ans.pdf> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/output-escaping/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/reflected-xss/> ;
    schema:description "ウェブページに出力する全ての要素にエスケープ処理を施すことは、反射型XSSに対してもIPAが挙げる根本的解決"@ja ;
    ks:evidence <https://www.ipa.go.jp/security/vuln/websecurity/about.html> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/input-time-escaping/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/stored-xss/> ;
    schema:description "入力を受け取った時点では出力先(HTML・CSV・JSON・メール・ログ)が決まっていないため、入力時のエスケープは二重エスケープとデータ破壊を招き、XSS対策としては不適切"@ja ;
    ks:evidence <https://www.ipa.go.jp/security/vuln/websecurity/about.html> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/input-time-escaping/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/sql-injection/> ;
    schema:description "SQLインジェクションでもエスケープはSQL文を構成する瞬間に行うものであり、入力を受け取った時点で行う入力時エスケープは対策にならない"@ja ;
    ks:evidence <https://www.ipa.go.jp/security/vuln/websecurity/sql.html> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/character-limit-validation/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/stored-xss/> ;
    schema:description "50字の入力文字数制限は投稿回数までは制限しなかったため、攻撃者は15回に分割投稿してHTMLをJavaScriptのコメントで読み飛ばさせ、1本のスクリプトをつないだ"@ja ;
    ks:evidence <https://www.ipa.go.jp/shiken/mondai-kaiotu/2023r05.html> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/input-validation/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/stored-xss/> ;
    schema:description "IPAは、幅広い文字種の入力を許す仕様では入力値検証の有効性は限定的であり、この方法に頼ることは推奨されないと明記している"@ja ;
    ks:evidence <https://www.ipa.go.jp/security/vuln/websecurity/about.html> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/prepared-statement/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/sql-injection/> ;
    schema:description "SQL文の組み立てを全てプレースホルダで実装することは、原理的に脆弱性が生じ得ないIPAの根本的解決"@ja ;
    ks:evidence <https://www.ipa.go.jp/security/vuln/websecurity/sql.html> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/stored-xss/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/session-cookie-theft/> ;
    schema:description "cookieにHttpOnly属性が付いていなかったため、攻撃スクリプトはdocument.cookieでセッションIDを読み取れた"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc6265> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/http-only-cookie/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/session-cookie-theft/> ;
    schema:description "HttpOnly属性はcookieのスコープをHTTPリクエストに限定し、document.cookie等の非HTTP APIからのアクセスを妨げる"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc6265> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/session-id/> ;
    rdf:predicate ks:storedIn ;
    rdf:object <https://comcomponent.com/knowledge/http-only-cookie/> ;
    schema:description "セッションIDは本来HttpOnly属性付きのcookieとして保存されるべきだが、この問題のQ社ではその属性が付いていなかった"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc6265> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/stored-xss/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/account-takeover/> ;
    schema:description "取得したセッションIDを使えば、ページVにアクセスした会員になりすましてWebアプリQの機能(クレジットカード情報の登録ページを含む)を使える"@ja ;
    ks:evidence <https://www.ipa.go.jp/shiken/mondai-kaiotu/ps6vr70000010d6y-att/2023r05a_sc_pm_ans.pdf> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/csrf-token/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/stored-xss/> ;
    schema:description "攻撃スクリプトは被害者と同じオリジンで動くため、正規の画面と同じ手順でアップロード用トークンを取得できる。CSRF対策のトークンはXSSを防がない"@ja ;
    ks:evidence <https://www.ipa.go.jp/shiken/mondai-kaiotu/ps6vr70000010d6y-att/2023r05a_sc_pm_ans.pdf> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/csrf-token/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/csrf/> ;
    schema:description "アップロード用トークンは、別サイトに置かれた偽のフォームから勝手にリクエストされることを防ぐための本来の仕組み(CSRF対策)"@ja ;
    ks:evidence <https://www.ipa.go.jp/shiken/mondai-kaiotu/ps6vr70000010d6y-att/2023r05a_sc_pm_ans.pdf> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/content-security-policy/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/csp-script-src/> ;
    schema:description "CSPはスクリプトの実行元を制限するscript-srcディレクティブを持つ"@ja ;
    ks:evidence <https://www.ipa.go.jp/shiken/mondai-kaiotu/2023r05.html> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/content-security-policy/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/csp-connect-src/> ;
    schema:description "CSPは通信先を制限するconnect-srcディレクティブを持つ"@ja ;
    ks:evidence <https://www.ipa.go.jp/shiken/mondai-kaiotu/2023r05.html> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/csp-script-src/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/stored-xss/> ;
    schema:description "script-src 'self'を指定し'unsafe-inline'を許可しない構成であれば、レビューに埋め込まれたインラインの<script>はそもそも実行されない"@ja ;
    ks:evidence <https://www.ipa.go.jp/shiken/mondai-kaiotu/2023r05.html> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/csp-connect-src/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/stored-xss/> ;
    schema:description "'self'など同一オリジンを許可する一般的なconnect-src指定では、2回の通信がどちらも同一オリジン宛てのためポリシーの許可範囲に収まり、この情報持ち出しは止まらない"@ja ;
    ks:evidence <https://www.ipa.go.jp/shiken/mondai-kaiotu/2023r05.html> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/same-origin-policy/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/cross-origin-script-attack/> ;
    schema:description "同じスクリプトを攻撃者のドメインに置いた場合は、document.cookieがそのオリジンのcookieしか返さずセッションIDを読めないうえ、クロスオリジンのXMLHttpRequestには既定でcookieが添付されずレスポンスも読めないため成立しない。被害サイトと同一オリジンで動く本問のXSSには効かない"@ja ;
    ks:evidence <https://www.ipa.go.jp/shiken/mondai-kaiotu/ps6vr70000010d6y-att/2023r05a_sc_pm_ans.pdf> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/withcredentials/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/cors/> ;
    schema:description "別オリジンのスクリプトがcredentials付きのリクエストでレスポンスを読むには、サーバーが送信元オリジンを明示したAccess-Control-Allow-OriginとAccess-Control-Allow-Credentials: trueを返す必要がある"@ja ;
    ks:evidence <https://www.ipa.go.jp/shiken/mondai-kaiotu/ps6vr70000010d6y-att/2023r05a_sc_pm_ans.pdf> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/withcredentials/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/account-takeover/> ;
    schema:description "withCredentials=trueへの書き換え・SameSiteがクロスサイト送信を許す設定・credentials付きCORSの許可の3条件が揃えば、別ドメインからでも認証済みのレスポンスを読まれ得る"@ja ;
    ks:evidence <https://www.ipa.go.jp/shiken/mondai-kaiotu/ps6vr70000010d6y-att/2023r05a_sc_pm_ans.pdf> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/samesite-cookie/> ;
    rdf:predicate ks:incompatibleWith ;
    rdf:object <https://comcomponent.com/knowledge/withcredentials/> ;
    schema:description "cookieのSameSiteがクロスサイト送信を許さない設定(既定のLax相当)では、withCredentials=trueを指定してもそのcookieは添付されない"@ja ;
    ks:evidence <https://www.ipa.go.jp/shiken/mondai-kaiotu/ps6vr70000010d6y-att/2023r05a_sc_pm_ans.pdf> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/cors/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/account-takeover/> ;
    schema:description "サーバーが送信元オリジンをcredentials付きで許可していれば、別オリジンのスクリプトでも認証済みレスポンスを読めてしまう"@ja ;
    ks:evidence <https://www.ipa.go.jp/shiken/mondai-kaiotu/ps6vr70000010d6y-att/2023r05a_sc_pm_ans.pdf> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/file-upload-type-check/> ;
    rdf:predicate ks:mitigates ;
    rdf:object <https://comcomponent.com/knowledge/stored-xss/> ;
    schema:description "画像ファイルの形式を中身で確認していれば、生のテキストをそのままPNGとしてアップロードする経路は止められるが、正当な画像のメタデータに文字列を忍ばせる手口は通ってしまう"@ja ;
    ks:evidence <https://www.ipa.go.jp/shiken/mondai-kaiotu/2023r05.html> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/file-reencoding/> ;
    rdf:predicate ks:mitigates ;
    rdf:object <https://comcomponent.com/knowledge/stored-xss/> ;
    schema:description "アップロードされた画像を再エンコードして配信すれば、生のバイト列やメタデータ領域に隠された文字列は消えるが、ピクセルとして符号化された情報までは消せない"@ja ;
    ks:evidence <https://www.ipa.go.jp/shiken/mondai-kaiotu/2023r05.html> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dom-based-xss/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/client-side-sink/> ;
    schema:description "DOM Based XSSと判定されるのは、攻撃文字列を実行可能にしたシンクがブラウザ側のJavaScript(innerHTMLへの代入など)にある場合。埋め込まれたスクリプトがXMLHttpRequestやgetElementByIdといったDOMのAPIを使うことは判定根拠にならず、本問はサーバーの出力処理がシンクなので格納型XSSになる(保存済みの値をブラウザ側でinnerHTMLに渡すいわゆるstored DOM XSSのように、保存されることとシンクがブラウザ側であることは両立し得る)"@ja ;
    ks:evidence <https://www.ipa.go.jp/shiken/mondai-kaiotu/ps6vr70000010d6y-att/2023r05a_sc_pm_cmnt.pdf> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .
