1<!DOCTYPE html> 2<html lang="sv"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width,initial-scale=1"> 6 <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate"> 7 <meta http-equiv="Pragma" content="no-cache"> 8 <meta http-equiv="Expires" content="0"> 9 <title>boardr</title> 10 <link rel="icon" type="image/svg+xml" href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiI+PHJlY3Qgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIiByeD0iNyIgZmlsbD0iIzBmMWUzNSIvPjx0ZXh0IHg9IjE0IiB5PSIyMiIgZm9udC1mYW1pbHk9Ikdlb3JnaWEsc2VyaWYiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IndoaXRlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5iPC90ZXh0PjxjaXJjbGUgY3g9IjI0IiBjeT0iMjIiIHI9IjMuNSIgZmlsbD0iI2M4YTg0YiIvPjwvc3ZnPg=="> 11 <!-- Sentry felspÃ¥rning â laddas före allt annat för att fÃ¥nga tidiga fel. 12 INGEN SRI: Sentry roterar sin loader-fil (precis som Plausible nedan) â en pinnad 13 integrity-hash blir stale och blockerar scriptet tyst (det VAR SENTRY-INTEGRATION-TRASIG). 14 Skydd: CSP script-src begränsar till js-de.sentry-cdn.com + crossorigin=anonymous. --> 15
15<script src="https://js-de.sentry-cdn.com/9c0d39cad07b4355c8798052c73261b7.min.js" crossorigin="anonymous"></script>
15 16 <!-- CDN dependencies (external to Vite bundle) --> 17
17<script src="/react.production.min.js"></script>
17 18
18<script src="/react-dom.production.min.js"></script>
18 19 <!-- C-PERF2: async â dessa dok-libs blockerar inte längre första paint. Alla anrop är 20 user-triggade (export/import/parse) i 19c/19b/20/04 med typeof-guards â laddade i god tid 21 innan användaren öppnar/exporterar dok. SRI (integrity+crossorigin) bevarad. 22 react/react-dom lämnas blockerande. --> 23
23<script async src="/mammoth.browser.min.js"></script>
23 24 <!-- SEC H3 (pentest 2026-05-28): xlsx självhostat istället för cdnjs. cdnjs har bara 25 SheetJS 0.18.5 (sÃ¥rbar: CVE-2023-30533 prototype pollution + CVE-2024-22363 ReDoS) â 26 patchade versioner finns inte pÃ¥ cdnjs. Self-hostad 0.20.3 (same-origin, 'self' i CSP, 27 ingen extern CDN att lita pÃ¥, ingen SRI behövs). Uppdatera filen i src/public/ vid version-bump. --> 28
28<script async src="/xlsx.full.min.js"></script>
28 29
29<script async src="/jszip.min.js"></script>
29 30 <!-- pdf.js har INGEN script-tagg längre (v3.7.133). 4.10.38 är ESM-only och självhostad i 31 public/ â den laddas lat via dynamisk import första gÃ¥ngen en PDF öppnas, genom fasaden 32 window.bmPdf (src/pdf-init.js). Vinsten: ~400 KB mindre pÃ¥ första paint, ingen cdnjs- 33 SRI att hÃ¥lla färsk, och workern är same-origin sÃ¥ CSP:ns worker-src 'self' släpper 34 igenom den (pÃ¥ cdnjs blockerades den â main-thread-parsning). --> 35 <link rel="stylesheet" href="/app.css"> 36 <!-- SEC-K5 (säkerhetsplan): Plausible laddas utan SRI eftersom de roterar sin 37 script-fil och en pinnad integrity-hash skulle bryta analytics. Kvarvarande 38 supply-chain-risk mitigeras via tre lager: 39 (1) CSP script-src begränsar till exakt https://plausible.io â domain-takeover 40 är enda angreppsvägen, vilket Plausible (kommersiell SaaS) skyddar mot. 41 (2) crossorigin=anonymous gör att en komprometterad CDN inte kan läsa cookies 42 eller andra credentials frÃ¥n vÃ¥r origin. 43 (3) referrerpolicy=no-referrer minimerar info-läckage till CDN-noden. 44 LÃ¥ngsiktig härdning: self-hosta Plausible-scriptet (backlog M-nivÃ¥). --> 45
45<script defer data-domain="app.boardr.ai" src="https://plausible.io/js/script.js" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
45 46
46<script type="module" crossorigin src="/app.js"></script>
46 47</head> 48<body> 49 <div id="root"></div> 50</body> 51</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.