PageSourceSearch

https://smejj-control.zeabur.app/assets/frame-guard.js

js smejj-control.zeabur.app collected 2026-10-03 08:24:36 UTC 1,539 bytes, 37 lines download raw bytes

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.