Åbner i en ny fane
CVE-2026-8445
Kritisk

CVE-2026-8445: Kritisk XSS-fejl i justhtml

justhtml frem til version 1.11.0 undlader at rense HTML-tegn i Markdown-output. Opdatér til 1.12.0 for at undgå cross-site scripting.

CVSS Score
9.8
Offentliggjort
23/08/2026
Patch-status
Opdatering findes
Exploit
Ingen kendt udnyttelse
Tidsfrist
Opdatér inden for 7 dage

Hvad er det?

justhtml er et bibliotek, der bruges i webapplikationer til at omdanne HTML-dokumenter til Markdown, et enkelt tekstformat der ofte gemmes i databaser eller vises videre til brugere. Fejlen, CVE-2026-8445, betyder at funktionen to_markdown() ikke fjerner eller omskriver tegnene , selv om biblioteket ellers gør det korrekt i sin to_html()-funktion. Det gælder blandt andet tekst fra elementer som title, textarea, noscript og plaintext, hvor indhold normalt tolkes som ren tekst. Konsekvensen er en sanitizer-bypass: en mekanisme, der skal filtrere farligt indhold, kan snydes, fordi rå HTML-kode, herunder scripts, slipper igennem uændret til Markdown-outputtet. Rammes dette output senere af en visning, der tolker det som HTML, kan koden udføres i besøgendes browser. Sårbarheden er klassificeret som CWE-79, cross-site scripting.

Hvem rammer det?

Sårbarheden rammer alle systemer, der bruger justhtml version 1.11.0 eller ældre til at konvertere brugerindsendt eller ekstern HTML til Markdown. Det gælder typisk CMS-løsninger, wiki- og dokumentationsværktøjer, kommentarfelter, chatfunktioner og systemer, der lader brugere indsende formateret tekst. Danske virksomheder og kommuner, der har bygget egne løsninger med dette bibliotek, eller som bruger tredjepartssystemer, der afhænger af det, bør undersøge deres kodebase og afhængigheder.

Hvad kan ske?

En angriber kan indsende tekst med skjult HTML-kode, for eksempel via et titelfelt eller en kommentar, som konverteres til Markdown og senere vises som HTML i en browser hos en anden bruger eller administrator. Herved kan angriberen få kode til at køre i offerets browser, stjæle sessions-cookies, udgive sig for offeret eller ændre indhold på siden. I en dansk virksomhed kan det betyde, at en kunde eller medarbejder uforvarende udfører handlinger på vegne af en angriber, eller at følsomme oplysninger lækkes fra en administrationsside.

Hvor alvorligt er det?

CVSS-scoren er 9,8 ud af 10, kritisk. Angrebet kræver ikke login og ingen handling fra offeret for selve indsendelsen af skadeligt indhold, og det kan udføres over netværket med lav kompleksitet. Den fulde effekt, at koden reelt udføres, afhænger dog af, at den efterfølgende Markdown-visning tolkes som HTML uden yderligere rensning. Der er ikke oplysninger om, at sårbarheden aktivt udnyttes i angreb på tidspunktet for offentliggørelsen, men den tekniske detaljegrad i beskrivelsen gør det realistisk at forudsige udnyttelse.

Hvad gør jeg nu?

Følg disse skridt for at fjerne risikoen:

  1. Opdatér justhtml til version 1.12.0 eller nyere i alle systemer og afhængigheder, hvor biblioteket bruges.
  2. Kortlæg hvilke applikationer og tjenester i jeres organisation, der afhænger af justhtml, direkte eller via andre biblioteker.
  3. Gennemgå steder, hvor Markdown-output fra biblioteket senere vises som HTML, og tilføj rensning der som ekstra sikkerhedslag.
  4. Test opdateringen i et testmiljø, hvis muligt, før den rulles ud i produktion, for at sikre at eksisterende Markdown-formatering ikke ændres uventet.
  5. Gennemgå logs for mistænkelige indsendelser med tegnene i tekstfelter, hvis I ikke allerede har opdateret.
  6. Kontakt en ekstern sikkerhedsrådgiver, hvis I ikke selv kan identificere, om og hvor biblioteket bruges i jeres systemer.
Tidsfrist

Opdatér inden for 7 dage

Sådan ser Auroa det

Vi anbefaler, at I opdaterer justhtml til version 1.12.0 hurtigst muligt, hvis biblioteket bruges i systemer, der behandler brugerindsendt indhold. Det er en simpel versionsopdatering med lav risiko for driftsforstyrrelser. I kan vente til næste planlagte vedligeholdelsesvindue, hvis I kan bekræfte, at Markdown-outputtet fra jeres system aldrig vises som HTML uden yderligere rensning, men vi fraråder at lade det stå ubehandlet i mere end en uge, givet den kritiske CVSS-score.

Tidslinje

23/08/2026
Sårbarheden offentliggjort
CVE-2026-8445 registreret med CVSS-score 9,8 og rettelse tilgængelig i justhtml version 1.12.0.

Konkrete eksempler

Intern wiki hos en dansk kommune

En kommune bruger et internt wikisystem, der lader medarbejdere skrive sider i HTML, som derefter konverteres til Markdown og gemmes i en database. En medarbejder indsætter, uden at vide det, en side kopieret fra en ekstern kilde med skjult script-kode i et title-element. Når en administrator senere åbner siden i redigeringsvisning, der viser den gemte Markdown som HTML, udføres koden i administratorens browser og kan bruges til at stjæle dennes login-session.

Ofte stillede spørgsmål

CVSS-detaljer

Attack Vector
NETWORK
Attack Complexity
LOW
Privileges Required
NONE
User Interaction
NONE
Scope
UNCHANGED
Confidentiality
HIGH
Integrity
HIGH
Availability
HIGH

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

CWE-svaghedstyper

CWE-79

Original NVD-beskrivelse (engelsk)

justhtml versions <= 1.11.0 (fixed in 1.12.0) do not sufficiently escape HTML-significant characters (angle brackets) in text nodes when converting a parsed document to Markdown via to_markdown(). While a small set of Markdown metacharacters are escaped, characters such as are preserved, so untrusted input that is safe in to_html() — including entity-decoded text (e.g. <script>) or text from RCDATA/RAWTEXT-parsed elements like,<textarea>, , and — can be emitted as raw HTML in the Markdown output, enabling a sanitizer bypass and potential cross-site scripting when that output is rendered.</p> </div></div><div id="brxe-06bbb0" class="brxe-div l-stack bricks-lazy-hidden"><h2 id="brxe-a2875b" class="brxe-heading c-section-head__title">Referencer & kilder</h2><div id="brxe-0a4f1a" class="brxe-div l-stack l-stack--tight bricks-lazy-hidden"><h3 id="brxe-2771cf" class="brxe-heading u-text-muted">Eksterne kilder</h3><div id="brxe-5b55b7" class="brxe-div l-stack l-stack--tight bricks-lazy-hidden"><a id="brxe-12211c" class="brxe-text-link"> · </a></div></div></div></div><div id="brxe-124064" class="brxe-div c-indsigt-sidebar l-stack bricks-lazy-hidden"><div id="brxe-3b733b" class="brxe-div l-stack l-stack--tight c-indsigt-panel c-indsigt-panel--score bricks-lazy-hidden"><div id="brxe-97bdbf" class="brxe-text-basic c-eyebrow">Sværhedsgrad</div><div id="brxe-bb8b8d" class="brxe-text-basic c-severity c-severity--lg" data-severity="Kritisk">Kritisk</div><div id="brxe-0552cc" class="brxe-text-basic c-cvss__label">CVSS Base Score</div><div id="brxe-2775cf" class="brxe-text-basic c-cvss">9,8</div><div id="brxe-1n764g" class="brxe-div c-indsigt-meter bricks-lazy-hidden" style="--score: 9.8" aria-hidden="true"></div></div><div id="brxe-707660" class="brxe-div l-stack l-stack--tight c-indsigt-panel c-indsigt-panel--facts bricks-lazy-hidden"><div id="brxe-6e36e5" class="brxe-text-basic c-eyebrow">Hurtige fakta</div><div id="brxe-b7ac65" class="brxe-div c-stat c-stat--mono bricks-lazy-hidden"><div id="brxe-342232" class="brxe-text-basic c-stat__label">CVE-ID</div><div id="brxe-d1203e" class="brxe-text-basic c-stat__value">CVE-2026-8445</div></div><div id="brxe-bfda9d" class="brxe-div c-stat bricks-lazy-hidden"><div id="brxe-552991" class="brxe-text-basic c-stat__label">Offentliggjort</div><div id="brxe-1e73e3" class="brxe-text-basic c-stat__value">23/08/2026</div></div><div id="brxe-2e0b87" class="brxe-div c-stat bricks-lazy-hidden"><div id="brxe-54aec8" class="brxe-text-basic c-stat__label">Sidst opdateret</div><div id="brxe-3cb296" class="brxe-text-basic c-stat__value">23/08/2026</div></div><div id="brxe-c807a3" class="brxe-div c-stat bricks-lazy-hidden"><div id="brxe-d493cf" class="brxe-text-basic c-stat__label">Exploit-status</div><div id="brxe-c75034" class="brxe-text-basic c-stat__value" data-status="none_known">Ingen kendt udnyttelse</div></div><div id="brxe-3da101" class="brxe-div c-stat bricks-lazy-hidden"><div id="brxe-d73076" class="brxe-text-basic c-stat__label">Patch-status</div><div id="brxe-a913bd" class="brxe-text-basic c-stat__value" data-status="available">Opdatering findes</div></div></div><div id="brxe-f29688" class="brxe-div l-stack l-stack--tight c-indsigt-panel c-indsigt-panel--help bricks-lazy-hidden"><div id="brxe-4aef96" class="brxe-text-basic c-eyebrow">Vi kan hjælpe</div><div id="brxe-9a75ac" class="brxe-div l-stack l-stack--tight bricks-lazy-hidden"><div class="brxe-y9aqoi brxe-div bricks-lazy-hidden" data-brx-loop-start="y9aqoi"><a class="brxe-43078e brxe-text-link" href="https://auroa.dk/ydelser/web-hardening/">Web Hardening</a></div><div class="brx-query-trail" data-query-element-id="y9aqoi" data-query-vars="{"post_type":["ydelser"],"post__in":["653"],"orderby":"post__in","posts_per_page":3,"ignore_sticky_posts":true,"post_status":"publish","paged":1}" data-page="1" data-max-pages="1" data-start="1" data-end="1"></div></div></div></div></div></div></section><section id="brxe-271191" class="brxe-section c-cta l-section bricks-lazy-hidden"><div id="brxe-95e6c6" class="brxe-container l-container bricks-lazy-hidden"><div id="brxe-bd2ada" class="brxe-div c-cta__inner c-glass-panel c-glass-panel--center l-stack bricks-lazy-hidden"><h2 id="brxe-d6d2df" class="brxe-heading c-cta__title">Brug for hjælp med jeres sikkerhed?</h2><div id="brxe-f81a39" class="brxe-text c-cta__text"><p>Vi hjælper SMV’er med at omsætte trusler som denne til konkrete handlingsplaner.</p> </div><div id="brxe-babd84" class="brxe-div l-cluster l-cluster--center bricks-lazy-hidden"><a id="brxe-86fdb6" class="brxe-button c-btn c-btn--primary bricks-button" href="/booking/?ameliaServiceId=1" data-cta="auto_booking">Book en samtale</a><a id="brxe-c007ba" class="brxe-button c-btn c-btn--outline bricks-button" href="/ydelser/" data-cta="auto_ydelser">Se vores ydelser</a></div></div></div></section></main><footer id="brx-footer"><div id="brxe-83e984" class="brxe-section c-footer bricks-lazy-hidden"><div id="brxe-391a97" class="brxe-container l-container bricks-lazy-hidden"><div id="brxe-467f3e" class="brxe-div c-footer__grid bricks-lazy-hidden"><div id="brxe-1190b3" class="brxe-div c-footer__col c-footer__col--brand bricks-lazy-hidden"><img width="1024" height="274" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201024%20274'%3E%3C/svg%3E" class="brxe-image css-filter size-large bricks-lazy-hidden" alt="Auroa ApS – Cybersecurity & Compliance" id="brxe-320f36" decoding="async" data-src="https://auroa.dk/media/brand-logo/Auroa_logo-1024x274.png" data-type="string" data-sizes="(max-width: 1024px) 100vw, 1024px" data-srcset="https://auroa.dk/media/brand-logo/Auroa_logo-1024x274.png 1024w, https://auroa.dk/media/brand-logo/Auroa_logo-300x80.png 300w, https://auroa.dk/media/brand-logo/Auroa_logo-768x206.png 768w, https://auroa.dk/media/brand-logo/Auroa_logo-1536x412.png 1536w, https://auroa.dk/media/brand-logo/Auroa_logo-2048x549.png 2048w" /><div id="brxe-0d08f7" class="brxe-text-basic c-footer__text">Praktisk cybersikkerhed og compliance til danske små og mellemstore virksomheder. Vi anbefaler kun det, vi selv ville drifte.</div><div id="brxe-523c23" class="brxe-text-basic c-footer__text">Auroa ApS · CVR 46131673<br>Njalsgade 21F, 2300 København S</div><a id="brxe-a5c88d" class="brxe-text-link c-footer__link" data-cta="linkedin_footer" href="https://www.linkedin.com/company/auroa-dk" rel="noopener noreferrer" target="_blank" aria-describedby="brx-new-tab-link-description" aria-label="Besøg Auroa på LinkedIn">Følg Auroa på LinkedIn</a></div><div id="brxe-d01906" class="brxe-div c-footer__col bricks-lazy-hidden"><h3 id="f88621h" class="brxe-heading c-footer__heading">Sikkerhed</h3><nav id="brxe-e4ed74" class="brxe-div c-footer__links bricks-lazy-hidden" aria-labelledby="f88621h"><a id="brxe-e4ed7401" class="brxe-text-link c-footer__link" data-cta="ydelse_nis2_raadgivning_footer" href="https://auroa.dk/ydelser/nis2-raadgivning/">NIS2 Rådgivning</a><a id="brxe-e4ed7402" class="brxe-text-link c-footer__link" data-cta="ydelse_dora_footer" href="https://auroa.dk/ydelser/dora-compliance/">DORA Compliance</a><a id="brxe-e4ed7403" class="brxe-text-link c-footer__link" data-cta="ydelse_siem_xdr_footer" href="https://auroa.dk/ydelser/siem-xdr/">SIEM & XDR</a><a id="brxe-e4ed7404" class="brxe-text-link c-footer__link" data-cta="ydelse_incident_response_footer" href="https://auroa.dk/ydelser/incident-response/">Incident Response</a><a id="brxe-e4ed7405" class="brxe-text-link c-footer__link" data-cta="ydelse_email_skjold_footer" href="https://auroa.dk/ydelser/e-mail-skjold/">E-mail Skjold</a></nav></div><div id="brxe-672db9" class="brxe-div c-footer__col bricks-lazy-hidden"><h3 id="408e6dh" class="brxe-heading c-footer__heading">Compliance & drift</h3><nav id="brxe-d79f9c" class="brxe-div c-footer__links bricks-lazy-hidden" aria-labelledby="408e6dh"><a id="brxe-d79f9c01" class="brxe-text-link c-footer__link" data-cta="ydelse_nis2_gap_footer" href="https://auroa.dk/ydelser/nis2-compliance-gap-analyse/">NIS2 Compliance & Gap Analyse</a><a id="brxe-d79f9c02" class="brxe-text-link c-footer__link" data-cta="ydelse_iso27001_footer" href="https://auroa.dk/ydelser/iso-27001-support/">ISO 27001 Support</a><a id="brxe-d79f9c03" class="brxe-text-link c-footer__link" data-cta="ydelse_mail_domaene_footer" href="https://auroa.dk/ydelser/mail-domaenesikkerhed/">Mail- & Domænesikkerhed</a><a id="brxe-d79f9c04" class="brxe-text-link c-footer__link" data-cta="ydelse_web_hardening_footer" href="https://auroa.dk/ydelser/web-hardening/">WordPress Security Hardening</a><a id="brxe-d79f9c05" class="brxe-text-link c-footer__link" data-cta="ydelse_netvaerk_footer" href="https://auroa.dk/ydelser/netvaerk/">Netværk</a></nav></div><div id="brxe-fvcol" class="brxe-div c-footer__col bricks-lazy-hidden"><h3 id="fvheadh" class="brxe-heading c-footer__heading">Viden & værktøjer</h3><nav id="brxe-fvlinks" class="brxe-div c-footer__links bricks-lazy-hidden" aria-labelledby="fvheadh"><a id="brxe-fv1" class="brxe-text-link c-footer__link" data-cta="nav_viden_footer" href="/viden/">Viden</a><a id="brxe-fv2" class="brxe-text-link c-footer__link" data-cta="nav_cve_database_footer" href="/indsigter/cve-database/">CVE-database</a><a id="brxe-fv3" class="brxe-text-link c-footer__link" data-cta="nav_cases_footer" href="/cases/">Cases</a><a id="brxe-fv4" class="brxe-text-link c-footer__link" data-cta="nav_vaerktoejer_footer" href="/vaerktoejer/">Gratis værktøjer</a><a id="brxe-fv5" class="brxe-text-link c-footer__link" data-cta="nav_mailsikkerhed_footer" href="/indsigter/maalinger/mailsikkerhed-i-danmark/">Mailsikkerhed i Danmark</a></nav></div><div id="brxe-df256b" class="brxe-div c-footer__col bricks-lazy-hidden"><h3 id="2b84e2h" class="brxe-heading c-footer__heading">Auroa</h3><nav id="brxe-e7172f" class="brxe-div c-footer__links bricks-lazy-hidden" aria-labelledby="2b84e2h"><a id="brxe-e7172f01" class="brxe-text-link c-footer__link" data-cta="nav_om_auroa_footer" href="https://auroa.dk/om-auroa/">Om Auroa</a><a id="brxe-ftmed" class="brxe-text-link c-footer__link" data-cta="nav_medarbejdere_footer" href="/medarbejdere/">Medarbejdere</a><a id="brxe-ftbaer" class="brxe-text-link c-footer__link" data-cta="nav_baeredygtighed_footer" href="/om-auroa/baeredygtighed/">Bæredygtighed og ansvar</a><a id="brxe-ftkarr" class="brxe-text-link c-footer__link" data-cta="nav_karriere_footer" href="/om-auroa/karriere/">Karriere</a><a id="brxe-bd8058" class="brxe-text-link c-footer__link" data-cta="nav_presse_footer" href="/indsigter/presse/">Presse</a><a id="brxe-269c4c" class="brxe-text-link c-footer__link" data-cta="nav_brand_footer" href="/om-auroa/brand/">Brand og logo</a><a id="brxe-e7172f04" class="brxe-text-link c-footer__link" data-cta="nav_losninger_footer" href="https://auroa.dk/losninger/">Løsninger</a><a id="brxe-e7172f05" class="brxe-text-link c-footer__link" data-cta="nav_kontakt_footer" href="https://auroa.dk/kontakt-os/">Kontakt os</a></nav></div></div><div id="brxe-ftbdg1" class="brxe-text c-footer__badges"><div><a class="c-footer__badge" href="https://www.danskindustri.dk/" target="_blank" rel="noopener noreferrer" aria-describedby="brx-new-tab-link-description" data-cta="di_footer"><img data-lazyloaded="1" src="data:image/gif;base64,R0lGODdhAQABAPAAAMPDwwAAACwAAAAAAQABAAACAkQBADs=" data-src="https://auroa.dk/media/trust-badges/di-logo.png" width="339" height="300" alt="Medlem af Dansk Industri" loading="lazy" decoding="async"><noscript><img src="https://auroa.dk/media/trust-badges/di-logo.png" width="339" height="300" alt="Medlem af Dansk Industri" loading="lazy" decoding="async"></noscript></a></div> <p class="c-footer__badges-note">Medlem af brancheforeningen <a class="c-footer__link" href="https://www.danskindustri.dk/brancher/di-digital/" target="_blank" rel="noopener noreferrer" aria-describedby="brx-new-tab-link-description" data-cta="di_digital_footer">DI Digital</a></p> </div><div id="brxe-eee1be" class="brxe-div c-footer__bottom bricks-lazy-hidden"><div id="brxe-9fc16d" class="brxe-shortcode c-footer__copyright">© 2026 Auroa ApS</div><nav id="brxe-99fe0f" class="brxe-div c-footer__bottom-links bricks-lazy-hidden" aria-label="Juridiske links og kontakt"><a id="brxe-b55a6a" class="brxe-text-link c-footer__link" data-cta="jura_privatliv_footer" href="https://auroa.dk/privatlivspolitik/">Privatlivspolitik</a><a id="brxe-f6f44f" class="brxe-text-link c-footer__link" data-cta="jura_cookies_footer" href="https://auroa.dk/cookiepolitik/">Cookiepolitik</a><a id="brxe-0299bc" class="brxe-text-link c-footer__link" data-cta="jura_salgsbetingelser_footer" href="https://auroa.dk/salgsbetingelser/">Salgsbetingelser</a><a id="brxe-f66952" class="brxe-text-link c-footer__link" data-cta="jura_disclosure_footer" href="https://auroa.dk/responsible-disclosure/">Responsible disclosure</a><a id="brxe-a6cd05" class="brxe-text-link c-footer__link" data-cta="auroa_group_footer" href="https://auroa.group" rel="noopener noreferrer" target="_blank" aria-describedby="brx-new-tab-link-description" aria-label="Besøg Auroa Group">Auroa Group</a><a id="brxe-1c6526" class="brxe-text-link c-footer__link" data-cta="email_footer" href="mailto:info@auroa.dk" aria-label="Send email til Auroa">info@auroa.dk</a><a id="brxe-12c4e2" class="brxe-text-link c-footer__link" data-cta="telefon_footer" href="tel:+4570605678" aria-label="Ring til Auroa på +45 70 60 56 78">+45 70 60 56 78</a></nav></div></div></div></footer><script type="speculationrules">{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/media/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/bricks-child/*","/wp-content/themes/bricks/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}</script> <div class="c-aura" id="aura-root" data-state="closed"> <button class="c-aura__launcher" id="aura-launcher" aria-label="Åbn Aura – AI-kundeservice"> <svg class="c-aura__shield" width="30" height="30" viewBox="0 0 32 38" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><path d="M16 1.5 30 6.5v11c0 9.2-6 15.6-14 19-8-3.4-14-9.8-14-19v-11L16 1.5Z" fill="url(#aura-g)" stroke="rgba(255,255,255,.25)" stroke-width="1"/><path d="M10.5 19.5l3.8 3.8 7.2-8" stroke="#fff" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"/><defs><linearGradient id="aura-g" x1="2" y1="2" x2="30" y2="36" gradientUnits="userSpaceOnUse"><stop stop-color="#2F6BFF"/><stop offset="1" stop-color="#00D3A7"/></linearGradient></defs></svg> <span class="c-aura__pulse" aria-hidden="true"></span> </button> <section inert class="c-aura__panel" id="aura-panel" aria-hidden="true" role="dialog" aria-label="Aura – AI-kundeservice"> <header class="c-aura__bar"> <span class="c-aura__brand"> <svg class="c-aura__shield" width="22" height="22" viewBox="0 0 32 38" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><path d="M16 1.5 30 6.5v11c0 9.2-6 15.6-14 19-8-3.4-14-9.8-14-19v-11L16 1.5Z" fill="url(#aura-g)" stroke="rgba(255,255,255,.25)" stroke-width="1"/><path d="M10.5 19.5l3.8 3.8 7.2-8" stroke="#fff" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"/><defs><linearGradient id="aura-g" x1="2" y1="2" x2="30" y2="36" gradientUnits="userSpaceOnUse"><stop stop-color="#2F6BFF"/><stop offset="1" stop-color="#00D3A7"/></linearGradient></defs></svg> <span>Aura</span> </span> <button class="c-aura__min" id="aura-min" aria-label="Minimér">−</button> </header> <div class="c-aura__log" id="aura-log" aria-live="polite"></div> <div class="c-aura__consent" id="aura-consent"> <p class="c-aura__consent-text">Aura er en AI-assistent. Dine beskeder behandles af Auroa ApS og vores AI-underleverandører. Oplysninger du selv afgiver (navn, telefon, e-mail) bruges udelukkende til at kontakte dig. Del ikke personfølsomme oplysninger som CPR eller kortnumre. Se vores <a href="/privatlivspolitik/">privatlivspolitik</a>.</p> <label class="c-aura__consent-check"> <input type="checkbox" id="aura-consent-box"> <span>Jeg accepterer og deler ingen personfølsomme oplysninger</span> </label> </div> <div id="aura-turnstile"></div> <div class="c-aura__input c-aura__input--locked" id="aura-input"> <textarea aria-label="Skriv til Aura" class="c-aura__field" id="aura-field" rows="1" maxlength="1000" placeholder="Spørg om NIS2, GDPR, DORA…"></textarea><button class="c-aura__send" id="aura-send" aria-label="Send">↑</button></div></section></div> <script id="auroa-dlc-js-after">(function () { 'use strict'; window.dataLayer = window.dataLayer || []; var CTX_KEY = 'auroa_ctx'; /* --------------------------------------------------------------- * Kontekst: ?context=viden-hvad-er-dnssec gemmes, saa den kan * kobles paa konverteringen selv efter navigation til /booking/. * Udloeber efter 30 min. for at undgaa forkert attribution. * ------------------------------------------------------------- */ function readContext() { try { var fromUrl = new URLSearchParams(window.location.search).get('context'); if (fromUrl) { sessionStorage.setItem(CTX_KEY, JSON.stringify({ v: fromUrl, t: Date.now() })); return fromUrl; } var stored = JSON.parse(sessionStorage.getItem(CTX_KEY) || 'null'); if (stored && (Date.now() - stored.t) < 1800000) { return stored.v; } } catch (e) { /* sessionStorage utilgaengelig – ignoreres bevidst */ } return ''; } function push(payload) { payload.context = readContext(); payload.page_path = window.location.pathname; window.dataLayer.push(payload); } /* Kald én gang ved load, saa ?context= gemmes med det samme. */ readContext(); /* --------------------------------------------------------------- * 1. CTA-klik – delegeret, virker ogsaa paa elementer indsat senere * ------------------------------------------------------------- */ document.addEventListener('click', function (e) { var el = e.target && e.target.closest ? e.target.closest('[data-cta]') : null; if (!el) { return; } push({ event: 'cta_click', cta_id: el.getAttribute('data-cta') || '', cta_text: (el.textContent || '').trim().slice(0, 100), cta_href: el.getAttribute('href') || '' }); }, true); /* --------------------------------------------------------------- * 2. Bricks-formular gennemfoert * Bricks udsender bricks/form/success paa document med * detail: { elementId, formData, res } * ------------------------------------------------------------- */ /* Feltudtraek til user_data. * * Bricks navngiver felter efter element-id (form-field-3cacb3), * saa der er ingen semantisk name-attribut at laese, og Bricks * render ingen <label>. Vi bruger derfor autocomplete, som er * sat manuelt paa kontaktformularen og er entydig. * * Vaerdierne stashes ved submit, fordi Bricks rydder formularen * inden success-eventet naar frem. */ var auroaFormStash = {}; function auroaReadForm(form) { var out = {}; if (!form || !form.querySelector) { return out; } function pick(sel) { var el = form.querySelector(sel); return el && el.value ? String(el.value).trim() : ''; } // 1. autocomplete 2. input-type 3. intet out.email = pick('[autocomplete="email"]') || pick('input[type="email"]'); out.phone = pick('[autocomplete="tel"]') || pick('input[type="tel"]'); out.name = pick('[autocomplete="name"]'); return out; } document.addEventListener('submit', function (ev) { var form = ev.target; if (!form || !form.getAttribute) { return; } var id = form.getAttribute('data-element-id') || ''; if (id) { auroaFormStash[id] = auroaReadForm(form); } }, true); function auroaLeadFields(d) { var f = auroaFormStash[d.elementId || ''] || {}; // Fallback: laes formularen igen hvis stashen mangler. if (!f.email && !f.phone && d.elementId) { f = auroaReadForm( document.querySelector('[data-element-id="' + d.elementId + '"]') ); } // Meta forventer fornavn og efternavn hver for sig. Formularen // har ét navnefelt, saa vi splitter ved foerste mellemrum og // lader resten vaere efternavn. var fn = '', ln = ''; if (f.name) { var parts = f.name.split(/\s+/).filter(Boolean); if (parts.length === 1) { fn = parts[0]; } else if (parts.length > 1) { fn = parts[0]; ln = parts.slice(1).join(' '); } } return { email: f.email || '', phone: f.phone || '', firstName: fn, lastName: ln }; } document.addEventListener('bricks/form/success', function (e) { var d = (e && e.detail) || {}; var auroaBase = { event: 'generate_lead', source: 'kontaktformular', form_id: d.elementId || '' }; // user_data kraever markedsfoerings-samtykke. Uden samtykke // returnerer build() null, og vi pusher som hidtil. if (window.AuroaUserData && window.AuroaUserData.build) { window.AuroaUserData.build(auroaLeadFields(d)).then(function (ud) { if (ud) { auroaBase.user_data = ud; } push(auroaBase); })['catch'](function () { push(auroaBase); }); } else { if (window.console && console.warn) { console.warn('[Auroa] AuroaUserData mangler - lead sendes uden user_data'); } push(auroaBase); } }); /* --------------------------------------------------------------- * 3. Amelia booking gennemfoert * Amelia udsender intet event og redirecter ikke, saa vi * aflytter dens egen XHR mod POST .../bookings og reagerer * kun paa et succesfuldt svar. * ------------------------------------------------------------- */ (function () { var sent = {}; /* Rekursiv gennemloebning. Amelia aendrer payload-struktur * mellem versioner, saa vi leder efter felternes FORM frem * for en fast sti. Dybdegraense mod cirkulaere objekter. */ function auroaWalk(obj, visit, depth) { depth = depth || 0; if (!obj || typeof obj !== 'object' || depth > 6) { return; } for (var k in obj) { if (!Object.prototype.hasOwnProperty.call(obj, k)) { continue; } var v = obj[k]; if (v && typeof v === 'object') { auroaWalk(v, visit, depth + 1); } else { visit(k, v); } } } function auroaParseBody(body) { if (!body) { return null; } if (typeof body === 'string') { try { return JSON.parse(body); } catch (e) {} try { var o = {}, p = new URLSearchParams(body); p.forEach(function (v, k) { o[k] = v; }); return o; } catch (e2) {} return null; } if (typeof FormData !== 'undefined' && body instanceof FormData) { var f = {}; body.forEach(function (v, k) { f[k] = v; }); return f; } return (typeof body === 'object') ? body : null; } function auroaBookingFields(sources) { var out = { email: '', phone: '', firstName: '', lastName: '', serviceId: '' }; var emailRe = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; sources.forEach(function (src) { auroaWalk(src, function (key, val) { if (typeof val !== 'string' && typeof val !== 'number') { return; } var s = String(val).trim(); if (!s) { return; } var k = String(key).toLowerCase(); if (!out.email && emailRe.test(s)) { out.email = s; } if (!out.phone && (k.indexOf('phone') >= 0 || k.indexOf('tlf') >= 0) && s.replace(/[^0-9]/g, '').length >= 8) { out.phone = s; } if (!out.firstName && k === 'firstname') { out.firstName = s; } if (!out.lastName && k === 'lastname') { out.lastName = s; } if (!out.serviceId && (k === 'serviceid' || k === 'service_id')) { out.serviceId = s; } }); }); return out; } function handleBookingResponse(xhr) { var data; try { data = JSON.parse(xhr.responseText); } catch (err) { return; } if (!data) { return; } /* Amelia svarer med { message, data: { booking|appointment ... } } */ var payload = data.data || {}; var booking = payload.booking || payload.appointment || payload; var id = booking && (booking.id || booking.appointmentId) ? String(booking.id || booking.appointmentId) : ''; /* Vaern mod dobbelt-push hvis Amelia retry'er samme kald */ if (id && sent[id]) { return; } if (id) { sent[id] = true; } /* Kundedata ligger i request-body'en; svaret bruges som * sekundaer kilde hvis Amelia en dag flytter dem derhen. */ var f = auroaBookingFields([ auroaParseBody(xhr.__auroaBody), payload ]); var auroaBase = { event: 'generate_lead', source: 'amelia', booking_id: id, service_id: (booking && booking.serviceId) ? String(booking.serviceId) : (f.serviceId || '') }; if (window.AuroaUserData && window.AuroaUserData.build) { window.AuroaUserData.build({ email: f.email, phone: f.phone, firstName: f.firstName, lastName: f.lastName }).then(function (ud) { if (ud) { auroaBase.user_data = ud; } push(auroaBase); })['catch'](function () { push(auroaBase); }); } else { if (window.console && console.warn) { console.warn('[Auroa] AuroaUserData mangler - booking sendes uden user_data'); } push(auroaBase); } } var open = XMLHttpRequest.prototype.open; var send = XMLHttpRequest.prototype.send; XMLHttpRequest.prototype.open = function (method, url) { this.__auroaBooking = String(method).toUpperCase() === 'POST' && /\/bookings(\?|$)/.test(String(url)); return open.apply(this, arguments); }; XMLHttpRequest.prototype.send = function (body) { /* Amelia sender kundedata i body'en, ikke i svaret. */ this.__auroaBody = body; if (this.__auroaBooking) { this.addEventListener('load', function () { if (this.status >= 200 && this.status < 300) { handleBookingResponse(this); } }); } return send.apply(this, arguments); }; })(); })(); //# sourceURL=auroa-dlc-js-after</script> <script data-optimized="1" id="auroa-chat-js-extra">var AuroaChat = {"endpoint":"https://auroa.dk/wp-json/auroa/v1/chat","nonce":"801baf1a77","sitekey":"0x4AAAAAABe21o-hqEsoW2oh"}; //# sourceURL=auroa-chat-js-extra</script> <script id="auroa-chat-js" src="https://auroa.dk/wp-content/plugins/auroa-chat/assets/auroa-chat.js?ver=1.3.3-1790565408" defer data-deferred="1"></script> <script data-optimized="1" id="bricks-scripts-js-extra">var bricksData = {"debug":"","locale":"da_DK","ajaxUrl":"https://auroa.dk/wp-admin/admin-ajax.php","restApiUrl":"https://auroa.dk/wp-json/bricks/v1/","nonce":"486081f94f","formNonce":"74afc3b30a","wpRestNonce":"801baf1a77","recaptchaIds":[],"animatedTypingInstances":[],"videoInstances":[],"splideInstances":[],"tocbotInstances":[],"swiperInstances":[],"queryLoopInstances":[],"interactions":[],"filterInstances":[],"isotopeInstances":[],"activeFiltersCountInstances":[],"googleMapInstances":[],"leafletMapInstances":[],"choicesInstances":[],"facebookAppId":"","headerPosition":"top","offsetLazyLoad":"300","useQueryFilter":"","i18n":{"choicesjs":{"noChoicesText":"Ingen valgmuligheder at v\u00e6lge imellem","noResultsText":"Ingen resultater fundet","removeItemIconText":"Fjern element","search":"S\u00f8g"},"close":"Luk","closeMobileMenu":"Luk mobilmenu","firstSlide":"G\u00e5 til f\u00f8rste slide","hidePassword":"Skjul adgangskode","lastSlide":"G\u00e5 til sidste slide","locationContent":"Placeringsindhold","locationSubtitle":"Placeringsundertitel","locationTitle":"Placeringstitel","mobileNavMenu":"Mobil navigationsmenu","navMenu":"Navigationsmenu","nextSlide":"N\u00e6ste slide","noLocationsFound":"Ingen placeringer fundet","openAccordion":"\u00c5bn akkordion","openMobileMenu":"\u00c5bn mobilmenu","opensInNewTab":"\u00c5bner i en ny fane","pause":"Pause automatisk afspilning","play":"Start automatisk afspilning","prevSlide":"Forrige slide","queryUpdated":"Resultater opdateret.","queryUpdatedPage":"Resultater opdateret. Side %s.","remove":"Fjern","showPassword":"Vis adgangskode","slideX":"G\u00e5 til slide %s","splide":{"carousel":"karrusel","select":"V\u00e6lg et slide, der skal vises","slide":"slide","slideLabel":"%s af %s"},"swiper":{"paginationBulletMessage":"G\u00e5 til slide {{index}}","slideLabelMessage":"{{index}} / {{slidesLength}}"},"zoom":"Zoom"},"filterNiceNames":[],"bricksGoogleMarkerScript":"https://auroa.dk/wp-content/themes/bricks/assets/js/libs/bricks-google-marker.min.js?v=2.4.3","infoboxScript":"https://auroa.dk/wp-content/themes/bricks/assets/js/libs/infobox.min.js?v=2.4.3","markerClustererScript":"https://auroa.dk/wp-content/themes/bricks/assets/js/libs/markerclusterer.min.js?v=2.4.3","mainQueryId":"","activeSearchTemplate":"0","defaultMode":"light","postId":"4333","previewTemplateId":"0","baseUrl":"https://auroa.dk/indsigter/cve-database/cve-2026-8445-xss-fejl-i-justhtml/","pageFilters":[],"language":"","wpmlUrlFormat":"","multilangPlugin":"","selectedFilters":[]}; //# sourceURL=bricks-scripts-js-extra</script> <script data-optimized="1" id="bricks-scripts-js" src="https://auroa.dk/wp-content/litespeed/js/b17e9f33d5f42bdff404364888fc06e5.js?ver=8a021"></script> <script data-optimized="1" id="auroa-reveal-js-after" src="data:text/javascript;base64,KGZ1bmN0aW9uKCl7J3VzZSBzdHJpY3QnO3ZhciBTRUw9Jy51LXJldmVhbCwgLmMtY2hhcnQsIC5jLWJpZ251bSwgLmMtc2hpZWxkLCAuYy1saXZlLCAuYy1wcm9jZXNzLWdyaWQnO3ZhciBSRURVQ0U9d2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpJykubWF0Y2hlcztmdW5jdGlvbiBhbmltYXRhYmxlKCl7cmV0dXJuIVJFRFVDRSYmJ0ludGVyc2VjdGlvbk9ic2VydmVyJyBpbiB3aW5kb3d9CmZ1bmN0aW9uIGNvdW50VXAoZWwpe3ZhciByYXc9KGVsLnRleHRDb250ZW50fHwnJykudHJpbSgpO3ZhciBkaWdpdHM9cmF3LnJlcGxhY2UoL1teMC05XS9nLCcnKTtpZighZGlnaXRzKXtyZXR1cm59CnZhciB0YXJnZXQ9cGFyc2VJbnQoZGlnaXRzLDEwKTtpZighdGFyZ2V0fHx0YXJnZXQ+MTAwMDAwMCl7cmV0dXJufQp2YXIgc2VwPXJhdy5pbmRleE9mKCcuJyk+LTF8fHJhdy5pbmRleE9mKCcsJyk+LTE7dmFyIHN0YXJ0PW51bGw7dmFyIGR1cj0xNDAwO2Z1bmN0aW9uIGZyYW1lKG5vdyl7aWYoc3RhcnQ9PT1udWxsKXtzdGFydD1ub3d9CnZhciBwPU1hdGgubWluKDEsKG5vdy1zdGFydCkvZHVyKTt2YXIgdj1NYXRoLnJvdW5kKHRhcmdldCooMS1NYXRoLnBvdygxLXAsMykpKTtlbC50ZXh0Q29udGVudD1zZXA/di50b0xvY2FsZVN0cmluZygnZGEtREsnKTpTdHJpbmcodik7aWYocDwxKXt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZyYW1lKX19CmVsLnRleHRDb250ZW50PScwJzt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZyYW1lKX0KaWYoIWFuaW1hdGFibGUoKSl7cmV0dXJufQp2YXIgaW89bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGZ1bmN0aW9uKGVudHJpZXMpe2VudHJpZXMuZm9yRWFjaChmdW5jdGlvbihlbnRyeSl7aWYoIWVudHJ5LmlzSW50ZXJzZWN0aW5nKXtyZXR1cm59CnZhciBlbD1lbnRyeS50YXJnZXQ7ZWwuY2xhc3NMaXN0LmFkZCgnaXMtaW52aWV3Jyk7aWYoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdjLWJpZ251bScpKXtjb3VudFVwKGVsKX0KaW8udW5vYnNlcnZlKGVsKX0pfSx7cm9vdE1hcmdpbjonMHB4IDBweCAtMjIlIDBweCcsdGhyZXNob2xkOjB9KTtmdW5jdGlvbiBvblNjcmVlbihlbCl7dmFyIHI9ZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIHIuYm90dG9tPjAmJnIudG9wPHdpbmRvdy5pbm5lckhlaWdodH0KZnVuY3Rpb24gYXJtKCl7ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChTRUwpLmZvckVhY2goZnVuY3Rpb24oZWwpe2lmKGVsLmRhdGFzZXQuYXVyb2FBcm1lZCl7cmV0dXJufQplbC5kYXRhc2V0LmF1cm9hQXJtZWQ9JzEnO2lmKG9uU2NyZWVuKGVsKSl7cmV0dXJufQplbC5jbGFzc0xpc3QuYWRkKCdpcy1hbmltJyk7aW8ub2JzZXJ2ZShlbCl9KX0KYXJtKCk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLGFybSl9KSgp" defer></script> <script data-optimized="1" id="auroa-dln-js-before" src="data:text/javascript;base64,d2luZG93LkF1cm9hTmF2Q29uZmlnPXsiZGVwdGgiOiEwLCJwb3N0X3R5cGUiOiJpbmRzaWd0IiwicG9zdF9pZCI6NDMzM30=" defer></script> <script id="auroa-dln-js-after">(function () { 'use strict'; window.dataLayer = window.dataLayer || []; var CFG = window.AuroaNavConfig || {}; var CTX_KEY = 'auroa_ctx'; /* Samme kontekstnoegle som auroa-datalayer-conversions.php, saa et * indholdsklik og den efterfoelgende konvertering kan kobles. */ function readContext() { try { var stored = JSON.parse(sessionStorage.getItem(CTX_KEY) || 'null'); if (stored && (Date.now() - stored.t) < 1800000) { return stored.v; } } catch (e) { /* sessionStorage utilgaengelig - ignoreres bevidst */ } return ''; } function push(payload) { payload.context = readContext(); payload.page_path = window.location.pathname; if (CFG.post_type) { payload.content_type = CFG.post_type; } if (CFG.post_id) { payload.content_id = String(CFG.post_id); } window.dataLayer.push(payload); } /* --------------------------------------------------------------- * 1. Hvor paa siden sad linket * Klassenavnene kommer fra design systemet, saa omraadet kan * afgoeres uden at maerke hvert enkelt link i haanden. * ------------------------------------------------------------- */ var AREAS = [ ['.c-megamenu', 'megamenu'], ['.c-header', 'header'], ['.c-footer', 'footer'], ['.c-related', 'relaterede'], ['.c-cta', 'cta'], ['.c-service-faq', 'faq'], ['.brxe-accordion', 'faq'], ['.c-item-list', 'ordliste'], ['.c-bullet-list', 'kilder'], ['.c-prose', 'brodtekst'], ['.c-article__body', 'brodtekst'], ['.c-cve-list', 'liste'], ['.c-card', 'kort'] ]; function areaOf(el) { for (var i = 0; i < AREAS.length; i++) { if (el.closest(AREAS[i][0])) { return AREAS[i][1]; } } return 'ovrigt'; } /* Naermeste overskrift foer linket. Det er den, der fortaeller * hvilket afsnit der rent faktisk faar folk videre. */ function headingAbove(el) { var node = el; while (node && node !== document.body) { var sib = node.previousElementSibling; while (sib) { if (/^H[1-4]$/.test(sib.tagName)) { return (sib.textContent || '').trim().slice(0, 80); } var inner = sib.querySelector ? sib.querySelector('h2, h3, h4') : null; if (inner) { return (inner.textContent || '').trim().slice(0, 80); } sib = sib.previousElementSibling; } node = node.parentElement; } return ''; } function linkKind(href, el) { if (!href) { return 'ukendt'; } if (href.charAt(0) === '#') { return 'anker'; } if (/^mailto:/i.test(href)) { return 'mail'; } if (/^tel:/i.test(href)) { return 'telefon'; } if (el.hasAttribute('download')) { return 'download'; } if (/\.(pdf|docx?|xlsx?|zip)($|\?)/i.test(href)) { return 'fil'; } try { var u = new URL(href, window.location.origin); return u.hostname === window.location.hostname ? 'intern' : 'ekstern'; } catch (e) { return 'intern'; } } document.addEventListener('click', function (e) { var el = e.target && e.target.closest ? e.target.closest('a[href]') : null; if (!el) { return; } /* Konverteringsknapper haandteres af conversions-plugin'et. * Uden denne linje taelles hvert CTA-klik to gange. */ if (el.closest('[data-cta]')) { return; } var href = el.getAttribute('href') || ''; push({ event: 'content_link_click', link_text: (el.textContent || '').trim().slice(0, 100), link_href: href, link_kind: linkKind(href, el), link_area: areaOf(el), link_section: headingAbove(el) }); }, true); /* --------------------------------------------------------------- * 2. Laesedybde * En sidevisning siger ikke, om nogen laeste ud over foerste * afsnit. Maales mod indholdselementet, ikke mod hele siden, * saa footeren ikke taeller med som "laest". * ------------------------------------------------------------- */ if (!CFG.depth) { return; } var target = document.querySelector('.c-article__body, .c-prose'); if (!target) { return; } var marks = [25, 50, 75, 100]; var hit = {}; var timer = null; function check() { var rect = target.getBoundingClientRect(); var total = rect.height; if (total <= 0) { return; } var seen = Math.min(total, Math.max(0, window.innerHeight - rect.top)); var percent = Math.round((seen / total) * 100); for (var i = 0; i < marks.length; i++) { var m = marks[i]; if (percent >= m && !hit[m]) { hit[m] = true; push({ event: 'content_read_depth', read_depth: m }); } } if (hit[100]) { window.removeEventListener('scroll', onScroll); window.removeEventListener('resize', onScroll); } } function onScroll() { if (timer) { return; } timer = window.setTimeout(function () { timer = null; check(); }, 250); } window.addEventListener('scroll', onScroll, { passive: true }); window.addEventListener('resize', onScroll, { passive: true }); check(); })(); //# sourceURL=auroa-dln-js-after</script> <script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"Bruger vi justhtml uden at vide det?","acceptedAnswer":{"@type":"Answer","text":"Det er muligt, hvis I bruger tredjepartssystemer til dokumentation, wikier eller kommentarfunktioner. Undersøg jeres afhængighedsliste, eller bed jeres leverandør bekræfte, om biblioteket bruges, og i hvilken version."}},{"@type":"Question","name":"Er vi ramt, hvis vi kun bruger to_html() og ikke to_markdown()?","acceptedAnswer":{"@type":"Answer","text":"Nej, sårbarheden ligger specifikt i to_markdown()-funktionen. Bruger jeres system kun to_html(), er I ikke direkte ramt af denne fejl."}},{"@type":"Question","name":"Kan vi vente til weekenden med at opdatere?","acceptedAnswer":{"@type":"Answer","text":"Er der ikke tegn på aktiv udnyttelse mod jeres system, kan opdateringen planlægges til nærmeste normale vedligeholdelsesvindue inden for få dage. Vent ikke længere end en uge, da sårbarheden er kritisk vurderet."}},{"@type":"Question","name":"Skal vi anmelde dette til Datatilsynet?","acceptedAnswer":{"@type":"Answer","text":"Kun hvis I konstaterer, at sårbarheden faktisk er blevet udnyttet, og at det har medført et sikkerhedsbrud med personoplysninger. Selve opdateringen af et sårbart bibliotek udløser ikke i sig selv en anmeldelsespligt."}},{"@type":"Question","name":"Hvordan tjekker vi, om vi er sårbare?","acceptedAnswer":{"@type":"Answer","text":"Find justhtml i jeres afhængighedsfil eller pakkeliste og se versionsnummeret. Er det 1.11.0 eller ældre, og bruger I to_markdown()-funktionen på brugerindsendt indhold, er I sårbare."}},{"@type":"Question","name":"Påvirker fejlen også ældre versioner end 1.11.0?","acceptedAnswer":{"@type":"Answer","text":"Ja, alle versioner op til og med 1.11.0 er ramt. Kun version 1.12.0 og nyere indeholder rettelsen."}}]}</script><script data-optimized="1" src="data:text/javascript;base64,KGZ1bmN0aW9uKCl7dmFyIGlkPTQzMzM7dmFyIHVybD0iaHR0cHM6XC9cL2F1cm9hLmRrXC93cC1qc29uXC9hdXJvYVwvdjFcL3Zpc25pbmciO3RyeXt2YXIgbmF2PXBlcmZvcm1hbmNlLmdldEVudHJpZXNCeVR5cGUoJ25hdmlnYXRpb24nKVswXTtpZihuYXYmJihuYXYudHlwZT09PSdyZWxvYWQnfHxuYXYudHlwZT09PSdiYWNrX2ZvcndhcmQnKSlyZXR1cm59Y2F0Y2goZSl7fQpmdW5jdGlvbiBzZW5kKCl7dmFyIGJvZHk9SlNPTi5zdHJpbmdpZnkoe2lkOmlkfSk7aWYobmF2aWdhdG9yLnNlbmRCZWFjb24mJm5hdmlnYXRvci5zZW5kQmVhY29uKHVybCxuZXcgQmxvYihbYm9keV0se3R5cGU6J2FwcGxpY2F0aW9uL2pzb24nfSkpKXtyZXR1cm59CmZldGNoKHVybCx7bWV0aG9kOidQT1NUJyxoZWFkZXJzOnsnQ29udGVudC1UeXBlJzonYXBwbGljYXRpb24vanNvbid9LGJvZHk6Ym9keSxrZWVwYWxpdmU6ITAsY3JlZGVudGlhbHM6J29taXQnfSkuY2F0Y2goZnVuY3Rpb24oKXt9KX0KaWYoZG9jdW1lbnQucHJlcmVuZGVyaW5nKXtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdwcmVyZW5kZXJpbmdjaGFuZ2UnLHNlbmQse29uY2U6ITB9KX1lbHNle3NlbmQoKX19KSgp" defer></script> <script data-no-optimize="1">window.lazyLoadOptions=Object.assign({},{threshold:300},window.lazyLoadOptions||{});!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).LazyLoad=e()}(this,function(){"use strict";function e(){return(e=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n,a=arguments[e];for(n in a)Object.prototype.hasOwnProperty.call(a,n)&&(t[n]=a[n])}return t}).apply(this,arguments)}function o(t){return e({},at,t)}function l(t,e){return t.getAttribute(gt+e)}function c(t){return l(t,vt)}function s(t,e){return function(t,e,n){e=gt+e;null!==n?t.setAttribute(e,n):t.removeAttribute(e)}(t,vt,e)}function i(t){return s(t,null),0}function r(t){return null===c(t)}function u(t){return c(t)===_t}function d(t,e,n,a){t&&(void 0===a?void 0===n?t(e):t(e,n):t(e,n,a))}function f(t,e){et?t.classList.add(e):t.className+=(t.className?" ":"")+e}function _(t,e){et?t.classList.remove(e):t.className=t.className.replace(new RegExp("(^|\\s+)"+e+"(\\s+|$)")," ").replace(/^\s+/,"").replace(/\s+$/,"")}function g(t){return t.llTempImage}function v(t,e){!e||(e=e._observer)&&e.unobserve(t)}function b(t,e){t&&(t.loadingCount+=e)}function p(t,e){t&&(t.toLoadCount=e)}function n(t){for(var e,n=[],a=0;e=t.children[a];a+=1)"SOURCE"===e.tagName&&n.push(e);return n}function h(t,e){(t=t.parentNode)&&"PICTURE"===t.tagName&&n(t).forEach(e)}function a(t,e){n(t).forEach(e)}function m(t){return!!t[lt]}function E(t){return t[lt]}function I(t){return delete t[lt]}function y(e,t){var n;m(e)||(n={},t.forEach(function(t){n[t]=e.getAttribute(t)}),e[lt]=n)}function L(a,t){var o;m(a)&&(o=E(a),t.forEach(function(t){var e,n;e=a,(t=o[n=t])?e.setAttribute(n,t):e.removeAttribute(n)}))}function k(t,e,n){f(t,e.class_loading),s(t,st),n&&(b(n,1),d(e.callback_loading,t,n))}function A(t,e,n){n&&t.setAttribute(e,n)}function O(t,e){A(t,rt,l(t,e.data_sizes)),A(t,it,l(t,e.data_srcset)),A(t,ot,l(t,e.data_src))}function w(t,e,n){var a=l(t,e.data_bg_multi),o=l(t,e.data_bg_multi_hidpi);(a=nt&&o?o:a)&&(t.style.backgroundImage=a,n=n,f(t=t,(e=e).class_applied),s(t,dt),n&&(e.unobserve_completed&&v(t,e),d(e.callback_applied,t,n)))}function x(t,e){!e||0<e.loadingCount||0<e.toLoadCount||d(t.callback_finish,e)}function M(t,e,n){t.addEventListener(e,n),t.llEvLisnrs[e]=n}function N(t){return!!t.llEvLisnrs}function z(t){if(N(t)){var e,n,a=t.llEvLisnrs;for(e in a){var o=a[e];n=e,o=o,t.removeEventListener(n,o)}delete t.llEvLisnrs}}function C(t,e,n){var a;delete t.llTempImage,b(n,-1),(a=n)&&--a.toLoadCount,_(t,e.class_loading),e.unobserve_completed&&v(t,n)}function R(i,r,c){var l=g(i)||i;N(l)||function(t,e,n){N(t)||(t.llEvLisnrs={});var a="VIDEO"===t.tagName?"loadeddata":"load";M(t,a,e),M(t,"error",n)}(l,function(t){var e,n,a,o;n=r,a=c,o=u(e=i),C(e,n,a),f(e,n.class_loaded),s(e,ut),d(n.callback_loaded,e,a),o||x(n,a),z(l)},function(t){var e,n,a,o;n=r,a=c,o=u(e=i),C(e,n,a),f(e,n.class_error),s(e,ft),d(n.callback_error,e,a),o||x(n,a),z(l)})}function T(t,e,n){var a,o,i,r,c;t.llTempImage=document.createElement("IMG"),R(t,e,n),m(c=t)||(c[lt]={backgroundImage:c.style.backgroundImage}),i=n,r=l(a=t,(o=e).data_bg),c=l(a,o.data_bg_hidpi),(r=nt&&c?c:r)&&(a.style.backgroundImage='url("'.concat(r,'")'),g(a).setAttribute(ot,r),k(a,o,i)),w(t,e,n)}function G(t,e,n){var a;R(t,e,n),a=e,e=n,(t=Et[(n=t).tagName])&&(t(n,a),k(n,a,e))}function D(t,e,n){var a;a=t,(-1<It.indexOf(a.tagName)?G:T)(t,e,n)}function S(t,e,n){var a;t.setAttribute("loading","lazy"),R(t,e,n),a=e,(e=Et[(n=t).tagName])&&e(n,a),s(t,_t)}function V(t){t.removeAttribute(ot),t.removeAttribute(it),t.removeAttribute(rt)}function j(t){h(t,function(t){L(t,mt)}),L(t,mt)}function F(t){var e;(e=yt[t.tagName])?e(t):m(e=t)&&(t=E(e),e.style.backgroundImage=t.backgroundImage)}function P(t,e){var n;F(t),n=e,r(e=t)||u(e)||(_(e,n.class_entered),_(e,n.class_exited),_(e,n.class_applied),_(e,n.class_loading),_(e,n.class_loaded),_(e,n.class_error)),i(t),I(t)}function U(t,e,n,a){var o;n.cancel_on_exit&&(c(t)!==st||"IMG"===t.tagName&&(z(t),h(o=t,function(t){V(t)}),V(o),j(t),_(t,n.class_loading),b(a,-1),i(t),d(n.callback_cancel,t,e,a)))}function $(t,e,n,a){var o,i,r=(i=t,0<=bt.indexOf(c(i)));s(t,"entered"),f(t,n.class_entered),_(t,n.class_exited),o=t,i=a,n.unobserve_entered&&v(o,i),d(n.callback_enter,t,e,a),r||D(t,n,a)}function q(t){return t.use_native&&"loading"in HTMLImageElement.prototype}function H(t,o,i){t.forEach(function(t){return(a=t).isIntersecting||0<a.intersectionRatio?$(t.target,t,o,i):(e=t.target,n=t,a=o,t=i,void(r(e)||(f(e,a.class_exited),U(e,n,a,t),d(a.callback_exit,e,n,t))));var e,n,a})}function B(e,n){var t;tt&&!q(e)&&(n._observer=new IntersectionObserver(function(t){H(t,e,n)},{root:(t=e).container===document?null:t.container,rootMargin:t.thresholds||t.threshold+"px"}))}function J(t){return Array.prototype.slice.call(t)}function K(t){return t.container.querySelectorAll(t.elements_selector)}function Q(t){return c(t)===ft}function W(t,e){return e=t||K(e),J(e).filter(r)}function X(e,t){var n;(n=K(e),J(n).filter(Q)).forEach(function(t){_(t,e.class_error),i(t)}),t.update()}function t(t,e){var n,a,t=o(t);this._settings=t,this.loadingCount=0,B(t,this),n=t,a=this,Y&&window.addEventListener("online",function(){X(n,a)}),this.update(e)}var Y="undefined"!=typeof window,Z=Y&&!("onscroll"in window)||"undefined"!=typeof navigator&&/(gle|ing|ro)bot|crawl|spider/i.test(navigator.userAgent),tt=Y&&"IntersectionObserver"in window,et=Y&&"classList"in document.createElement("p"),nt=Y&&1<window.devicePixelRatio,at={elements_selector:".lazy",container:Z||Y?document:null,threshold:300,thresholds:null,data_src:"src",data_srcset:"srcset",data_sizes:"sizes",data_bg:"bg",data_bg_hidpi:"bg-hidpi",data_bg_multi:"bg-multi",data_bg_multi_hidpi:"bg-multi-hidpi",data_poster:"poster",class_applied:"applied",class_loading:"litespeed-loading",class_loaded:"litespeed-loaded",class_error:"error",class_entered:"entered",class_exited:"exited",unobserve_completed:!0,unobserve_entered:!1,cancel_on_exit:!0,callback_enter:null,callback_exit:null,callback_applied:null,callback_loading:null,callback_loaded:null,callback_error:null,callback_finish:null,callback_cancel:null,use_native:!1},ot="src",it="srcset",rt="sizes",ct="poster",lt="llOriginalAttrs",st="loading",ut="loaded",dt="applied",ft="error",_t="native",gt="data-",vt="ll-status",bt=[st,ut,dt,ft],pt=[ot],ht=[ot,ct],mt=[ot,it,rt],Et={IMG:function(t,e){h(t,function(t){y(t,mt),O(t,e)}),y(t,mt),O(t,e)},IFRAME:function(t,e){y(t,pt),A(t,ot,l(t,e.data_src))},VIDEO:function(t,e){a(t,function(t){y(t,pt),A(t,ot,l(t,e.data_src))}),y(t,ht),A(t,ct,l(t,e.data_poster)),A(t,ot,l(t,e.data_src)),t.load()}},It=["IMG","IFRAME","VIDEO"],yt={IMG:j,IFRAME:function(t){L(t,pt)},VIDEO:function(t){a(t,function(t){L(t,pt)}),L(t,ht),t.load()}},Lt=["IMG","IFRAME","VIDEO"];return t.prototype={update:function(t){var e,n,a,o=this._settings,i=W(t,o);{if(p(this,i.length),!Z&&tt)return q(o)?(e=o,n=this,i.forEach(function(t){-1!==Lt.indexOf(t.tagName)&&S(t,e,n)}),void p(n,0)):(t=this._observer,o=i,t.disconnect(),a=t,void o.forEach(function(t){a.observe(t)}));this.loadAll(i)}},destroy:function(){this._observer&&this._observer.disconnect(),K(this._settings).forEach(function(t){I(t)}),delete this._observer,delete this._settings,delete this.loadingCount,delete this.toLoadCount},loadAll:function(t){var e=this,n=this._settings;W(t,n).forEach(function(t){v(t,e),D(t,n,e)})},restoreAll:function(){var e=this._settings;K(e).forEach(function(t){P(t,e)})}},t.load=function(t,e){e=o(e);D(t,e)},t.resetStatus=function(t){i(t)},t}),function(t,e){"use strict";function n(){e.body.classList.add("litespeed_lazyloaded")}function a(){console.log("[LiteSpeed] Start Lazy Load"),o=new LazyLoad(Object.assign({},t.lazyLoadOptions||{},{elements_selector:"[data-lazyloaded]",callback_finish:n})),i=function(){o.update()},t.MutationObserver&&new MutationObserver(i).observe(e.documentElement,{childList:!0,subtree:!0,attributes:!0})}var o,i;t.addEventListener?t.addEventListener("load",a,!1):t.attachEvent("onload",a)}(window,document);</script></body></html> <!-- Page optimized by LiteSpeed Cache @2026-10-15 21:54:34 --> <!-- Page cached by LiteSpeed Cache 7.9.1 on 2026-10-15 21:54:34 --> <!-- QUIC.cloud CCSS loaded ✅ /ccss/d1393c381cc101d34fd79ca54addd3b1.css -->