67 lines
4.3 KiB
XML
67 lines
4.3 KiB
XML
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 720 1420" role="img" aria-labelledby="title desc">
|
|
<title id="title">Граница учебного запроса к административному маршруту</title>
|
|
<desc id="desc">Вертикальный путь POST запроса от браузера к прокси, проверке сессии, origin и token, проверке права, изменению состояния и ответному контракту. Внизу указана учебная fixture.</desc>
|
|
<style>
|
|
.title { fill: #f8fafc; font-family: Arial, sans-serif; font-size: 34px; font-weight: 700; }
|
|
.subtitle { fill: #cbd5e1; font-family: Arial, sans-serif; font-size: 22px; }
|
|
.card-title { fill: #0f172a; font-family: Arial, sans-serif; font-size: 27px; font-weight: 700; }
|
|
.body { fill: #334155; font-family: Arial, sans-serif; font-size: 23px; }
|
|
.gate { fill: #166534; font-family: Arial, sans-serif; font-size: 22px; font-weight: 700; }
|
|
.note { fill: #92400e; font-family: Arial, sans-serif; font-size: 21px; font-weight: 700; }
|
|
.num { fill: #ffffff; font-family: Arial, sans-serif; font-size: 22px; font-weight: 700; text-anchor: middle; }
|
|
</style>
|
|
<defs>
|
|
<marker id="arrow" markerWidth="10" markerHeight="10" refX="5" refY="5" orient="auto-start-reverse">
|
|
<path d="M0,0 L10,5 L0,10 z" fill="#64748b"/>
|
|
</marker>
|
|
</defs>
|
|
<rect width="720" height="1420" fill="#f8fafc"/>
|
|
<rect x="0" y="0" width="720" height="188" fill="#0f172a"/>
|
|
<text x="48" y="72" class="title">Граница одного POST</text>
|
|
<text x="48" y="116" class="title">не набор несвязанных headers</text>
|
|
<text x="48" y="158" class="subtitle">training origin: admin.example.test</text>
|
|
|
|
<line x1="360" y1="330" x2="360" y2="370" stroke="#64748b" stroke-width="8" marker-end="url(#arrow)"/>
|
|
<line x1="360" y1="524" x2="360" y2="564" stroke="#64748b" stroke-width="8" marker-end="url(#arrow)"/>
|
|
<line x1="360" y1="718" x2="360" y2="758" stroke="#64748b" stroke-width="8" marker-end="url(#arrow)"/>
|
|
<line x1="360" y1="912" x2="360" y2="952" stroke="#64748b" stroke-width="8" marker-end="url(#arrow)"/>
|
|
<line x1="360" y1="1106" x2="360" y2="1146" stroke="#64748b" stroke-width="8" marker-end="url(#arrow)"/>
|
|
|
|
<rect x="48" y="220" width="624" height="110" rx="18" fill="#dbeafe"/>
|
|
<circle cx="86" cy="265" r="21" fill="#2563eb"/>
|
|
<text x="86" y="273" class="num">1</text>
|
|
<text x="126" y="270" class="card-title">HTML-форма</text>
|
|
<text x="126" y="302" class="body">POST, origin, cookie, token</text>
|
|
|
|
<rect x="48" y="414" width="624" height="110" rx="18" fill="#e0f2fe"/>
|
|
<circle cx="86" cy="459" r="21" fill="#0284c7"/>
|
|
<text x="86" y="467" class="num">2</text>
|
|
<text x="126" y="464" class="card-title">Proxy contract</text>
|
|
<text x="126" y="496" class="body">область /admin/ и response policy</text>
|
|
|
|
<rect x="48" y="608" width="624" height="110" rx="18" fill="#dcfce7"/>
|
|
<circle cx="86" cy="653" r="21" fill="#16a34a"/>
|
|
<text x="86" y="661" class="num">3</text>
|
|
<text x="126" y="658" class="card-title">Session gate</text>
|
|
<text x="126" y="690" class="gate">нет session → 401</text>
|
|
|
|
<rect x="48" y="802" width="624" height="110" rx="18" fill="#dcfce7"/>
|
|
<circle cx="86" cy="847" r="21" fill="#16a34a"/>
|
|
<text x="86" y="855" class="num">4</text>
|
|
<text x="126" y="852" class="card-title">Form context gate</text>
|
|
<text x="126" y="884" class="gate">origin + token, иначе 403</text>
|
|
|
|
<rect x="48" y="996" width="624" height="110" rx="18" fill="#dcfce7"/>
|
|
<circle cx="86" cy="1041" r="21" fill="#16a34a"/>
|
|
<text x="86" y="1049" class="num">5</text>
|
|
<text x="126" y="1046" class="card-title">Permission gate</text>
|
|
<text x="126" y="1078" class="gate">profile:write, затем update</text>
|
|
|
|
<rect x="48" y="1190" width="624" height="182" rx="18" fill="#fef3c7"/>
|
|
<text x="80" y="1242" class="card-title">Ответ и evidence</text>
|
|
<text x="80" y="1280" class="note">CSP + Set-Cookie contract</text>
|
|
<text x="80" y="1314" class="body">fixture: expected request → 204</text>
|
|
<text x="80" y="1346" class="body">три изменённых входа → 403</text>
|
|
<text x="80" y="1378" class="body">in-memory, без сети и scanner</text>
|
|
</svg>
|