1// smejj.com â Klickjacking-Schutz (QA-Welle 1, Befund F-04). 2// 3// Warum ein eigenes Modul und nicht die CSP: Die Direktive `frame-ancestors` 4// wirkt ausschliesslich als HTTP-Header. In einer <meta http-equiv>-CSP 5// ignorieren Browser sie laut Spezifikation vollstaendig â und GitHub Pages Free 6// kann keine eigenen Header setzen. Ein Inline-Skript scheidet ebenfalls aus, weil 7// die CSP `script-src 'self'` erzwingt. Bleibt genau dieser Weg: ein kleines, 8// eigenstaendiges Modul im Shell-Precache. 9// 10// Verhalten: Laeuft die Seite in einem fremden Rahmen, wird sie sofort aus dem 11// Rahmen heraus auf die eigene Adresse geleitet. Ein Angreifer kann die Oberflaeche 12// damit nicht mehr unsichtbar ueber eine eigene Seite legen und Klicks abfangen. 13// 14// Fail-safe statt fail-closed: Kann der Rahmenzustand nicht gelesen werden (in 15// einem fremden Rahmen wirft der Zugriff auf top.location eine Sicherheitsausnahme), 16// gilt die Seite als eingerahmt und bricht aus. Lieber einmal zu viel ausbrechen 17// als eine abgefangene Sitzung. 18 19function istEingerahmt() { 20 try { 21 return window.self !== window.top; 22 } catch { 23 // Zugriff verweigert = fremder Rahmen mit anderer Herkunft. 24 return true; 25 } 26} 27 28if (istEingerahmt()) { 29 try { 30 window.top.location.replace(window.location.href); 31 } catch { 32 // Der Rahmen laesst die Navigation nicht zu: Inhalt wenigstens leeren, 33 // damit nichts Anklickbares stehen bleibt. 34 document.documentElement.replaceChildren(); 35 window.location.replace("about:blank"); 36 } 37}
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.