|
| 1 | +--- |
| 2 | +title: Cookies |
| 3 | +layout: wide |
| 4 | +toc: false |
| 5 | +--- |
| 6 | + |
| 7 | +## Cookie Handling |
| 8 | + |
| 9 | +These tests check how servers and frameworks handle adversarial `Cookie` headers. Cookie parsing is done at the framework level, not by application code, so malformed cookies can crash parsers or produce mangled values before your code ever runs. All cookie tests are **unscored** since cookies are governed by RFC 6265, not RFC 9110/9112. |
| 10 | + |
| 11 | +<style>h1.hx\:mt-2{display:none}.probe-hint{background:#ddf4ff;border:1px solid #54aeff;border-radius:6px;padding:10px 14px;font-size:13px;color:#0969da;font-weight:500}html.dark .probe-hint{background:#1c2333;border-color:#1f6feb;color:#58a6ff}</style> |
| 12 | +<div style="display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:16px;"> |
| 13 | +<div class="probe-hint"><strong style="font-size:14px;">Server Name</strong><br>Click to view Dockerfile and source code</div> |
| 14 | +<div class="probe-hint"><strong style="font-size:14px;">Table Row</strong><br>Click to expand all results for that server</div> |
| 15 | +<div class="probe-hint"><strong style="font-size:14px;">Result Cell</strong><br>Click to see the full HTTP request and response</div> |
| 16 | +</div> |
| 17 | + |
| 18 | +<div class="probe-filters"> |
| 19 | +<div id="lang-filter"></div> |
| 20 | +<div id="method-filter"></div> |
| 21 | +<div id="rfc-level-filter"></div> |
| 22 | +</div> |
| 23 | +<div id="table-cookies"><p><em>Loading...</em></p></div> |
| 24 | + |
| 25 | +<script src="/Http11Probe/probe/data.js"></script> |
| 26 | +<script src="/Http11Probe/probe/render.js"></script> |
| 27 | +<script> |
| 28 | +(function () { |
| 29 | + if (!window.PROBE_DATA) { |
| 30 | + document.getElementById('table-cookies').innerHTML = '<p><em>No probe data available yet. Run the Probe workflow manually on <code>main</code> to generate results.</em></p>'; |
| 31 | + return; |
| 32 | + } |
| 33 | + var GROUPS = [ |
| 34 | + { key: 'echo', label: 'Echo-Based (Survivability)', testIds: [ |
| 35 | + 'COOK-ECHO','COOK-OVERSIZED','COOK-EMPTY','COOK-NUL', |
| 36 | + 'COOK-CONTROL-CHARS','COOK-MANY-PAIRS','COOK-MALFORMED','COOK-MULTI-HEADER' |
| 37 | + ]}, |
| 38 | + { key: 'parsed', label: 'Parsed Cookies (Framework Parser)', testIds: [ |
| 39 | + 'COOK-PARSED-BASIC','COOK-PARSED-MULTI','COOK-PARSED-EMPTY-VAL','COOK-PARSED-SPECIAL' |
| 40 | + ]} |
| 41 | + ]; |
| 42 | + |
| 43 | + var ALL_IDS = []; |
| 44 | + GROUPS.forEach(function (g) { g.testIds.forEach(function (tid) { ALL_IDS.push(tid); }); }); |
| 45 | + |
| 46 | + var langData = window.PROBE_DATA; |
| 47 | + var methodFilter = null; |
| 48 | + var rfcLevelFilter = null; |
| 49 | + |
| 50 | + function rerender() { |
| 51 | + var data = langData; |
| 52 | + if (methodFilter) data = ProbeRender.filterByMethod(data, methodFilter); |
| 53 | + if (rfcLevelFilter) data = ProbeRender.filterByRfcLevel(data, rfcLevelFilter); |
| 54 | + var ctx = ProbeRender.buildLookups(data.servers); |
| 55 | + ctx.testIds = ALL_IDS; |
| 56 | + ProbeRender.renderSubTables('table-cookies', 'Cookies', ctx, GROUPS); |
| 57 | + } |
| 58 | + rerender(); |
| 59 | + var catData = ProbeRender.filterByCategory(window.PROBE_DATA, ['Cookies']); |
| 60 | + ProbeRender.renderLanguageFilter('lang-filter', window.PROBE_DATA, function (d) { langData = d; rerender(); }); |
| 61 | + ProbeRender.renderMethodFilter('method-filter', catData, function (m) { methodFilter = m; rerender(); }); |
| 62 | + ProbeRender.renderRfcLevelFilter('rfc-level-filter', catData, function (l) { rfcLevelFilter = l; rerender(); }); |
| 63 | +})(); |
| 64 | +</script> |
0 commit comments