feat: 가상화 문서들 추가

This commit is contained in:
DongHyeonka
2026-09-10 08:54:05 +09:00
parent e9f6a93327
commit 43e1aadef0
695 changed files with 153404 additions and 12754 deletions
File diff suppressed because one or more lines are too long
@@ -13,11 +13,11 @@
"long_description": "왼쪽의 BFF CSRF endpoint에서 두 결과가 갈라진다. XSRF-TOKEN cookie에는 raw token이 저장되고 JSON body에는 XOR와 Base64로 masked된 token 및 headerName이 담긴다. 두 결과는 SPA의 POST 조립 단계로 모이지만, JSON에서는 headerName만 사용하고 실제 X-XSRF-TOKEN 값은 document.cookie에서 읽은 raw token이다. POST에는 같은 raw 값을 가진 cookie와 header가 함께 도달하고 Spring CSRF filter가 일치 여부를 확인한다.",
"source_context": {
"document": "document.md",
"document_sha256": "df4d1a604c74e756672b5b40510abfedb8c67b39af280a5f51985ea9972f5371",
"document_sha256": "e2cc061f683294c937f089ad874cbf7a617f7313c07a92c2148fb11287a0da37",
"anchor": {
"kind": "marker",
"value": "ap3-csrf-boundary",
"line": 858
"kind": "heading",
"value": "AP3 완주: session cookie가 BFF의 downstream Bearer가 되기까지",
"line": 681
}
},
"composition": {
@@ -39,8 +39,8 @@
"description": "CookieCsrfTokenRepository와 CsrfController를 통해 raw cookie와 masked JSON 응답을 만드는 endpoint.",
"evidence": [
{
"start_line": 819,
"end_line": 844
"start_line": 855,
"end_line": 880
}
],
"assumption": false
@@ -60,12 +60,12 @@
"description": "Cookie repository가 path /에 설정하며 SPA가 document.cookie로 읽는 raw CSRF token.",
"evidence": [
{
"start_line": 827,
"end_line": 834
"start_line": 863,
"end_line": 870
},
{
"start_line": 844,
"end_line": 856
"start_line": 880,
"end_line": 892
}
],
"assumption": false
@@ -79,13 +79,13 @@
"details": [
"token = XOR/Base64",
"headerName metadata",
"POST token 값으로 미사용"
"POST 헤더 미사용"
],
"description": "Request attribute용 token을 masked한 JSON 표현으로, SPA는 token 값이 아니라 headerName만 사용한다.",
"evidence": [
{
"start_line": 836,
"end_line": 846
"start_line": 872,
"end_line": 882
}
],
"assumption": false
@@ -103,12 +103,12 @@
"description": "Raw cookie 값을 X-XSRF-TOKEN header에 넣어 preference POST를 만드는 browser code.",
"evidence": [
{
"start_line": 846,
"end_line": 856
"start_line": 882,
"end_line": 892
},
{
"start_line": 862,
"end_line": 870
"start_line": 898,
"end_line": 906
}
],
"assumption": false
@@ -126,16 +126,16 @@
"description": "Repository의 expected raw token과 submitted raw header를 controller 실행 전에 비교하는 방어선.",
"evidence": [
{
"start_line": 854,
"end_line": 854
"start_line": 890,
"end_line": 890
},
{
"start_line": 873,
"end_line": 873
"start_line": 909,
"end_line": 909
},
{
"start_line": 897,
"end_line": 904
"start_line": 933,
"end_line": 940
}
],
"assumption": false
@@ -150,8 +150,8 @@
"kind": "response",
"evidence": [
{
"start_line": 827,
"end_line": 834
"start_line": 863,
"end_line": 870
}
],
"assumption": false
@@ -164,8 +164,8 @@
"kind": "response",
"evidence": [
{
"start_line": 836,
"end_line": 844
"start_line": 872,
"end_line": 880
}
],
"assumption": false
@@ -174,13 +174,13 @@
"id": "raw-cookie-to-assembler",
"from": "raw-cookie",
"to": "post-assembler",
"label": "document.cookie · raw",
"label": "raw cookie",
"kind": "data",
"emphasis": "primary",
"evidence": [
{
"start_line": 846,
"end_line": 856
"start_line": 882,
"end_line": 892
}
],
"assumption": false
@@ -189,12 +189,12 @@
"id": "masked-json-to-assembler",
"from": "masked-json",
"to": "post-assembler",
"label": "headerName only",
"label": "headerName",
"kind": "data",
"evidence": [
{
"start_line": 846,
"end_line": 856
"start_line": 882,
"end_line": 892
}
],
"assumption": false
@@ -203,13 +203,13 @@
"id": "assembler-to-filter",
"from": "post-assembler",
"to": "csrf-filter",
"label": "Cookie raw = Header raw",
"label": "raw 대조",
"kind": "request",
"emphasis": "primary",
"evidence": [
{
"start_line": 848,
"end_line": 873
"start_line": 884,
"end_line": 909
}
],
"assumption": false