Alle Komponenten

LmsPhishingQuiz

Angriffssimulationen

Phishing-Quiz — entscheiden, und am Text sehen, woran man es erkannt hätte.

In Markdown: ::lms-phishing-quiz Im Zusammenhang ansehen

Übernommen aus dem PhishingQuiz der BAK-Spiele (React/MobX, rund 3300 Zeilen).

Dieselbe Frage wie beim Postfach-Sortieren, aber als Einzelprüfung mit Bewertung: Die verräterische Stelle leuchtet im Text auf, nicht als Aufzählung daneben — mit einer Ziffer, die auf die Erläuterung darunter zeigt. Dazu Tipps gegen Punktabzug und am Ende eine Bilanz, die nicht nur zählt, wie viele richtig waren, sondern welche Merkmale übersehen wurden. Übernommen aus dem PhishingQuiz der BAK-Spiele. Wer nur sortieren lassen will, nimmt LmsMailTriage — der ist schlanker und braucht keine Markierungen. Drei Stufen, wie in der Vorlage. Das Original führt nicht gleich ins Spiel, sondern erst durch ein Tutorial: zwei Nachrichten, die selbst sagen, was sie sind. Danach kommen Level 1 und Level 2. Diese Reihenfolge ist der Lehrgang und keine Verpackung — wer noch die Bedienung sucht, achtet nicht auf die Absenderadresse. Hier ist jede Stufe ein eigener Baustein mit eigener id und eigenem Stand; im Tutorial sind die Tipps umsonst, in den beiden Leveln kosten sie Punkte. Die Daten rechnen mit. Resturlaubsjahr, Stichtag und Verfallsfrist stehen nicht als feste Zahl im Beispiel, sondern als 2025 oder 21.02.2027 — Versatz, Einheit, Schema. Eine Mitteilung über den „Resturlaub 2020“ verrät sich sonst an der falschen Stelle: nicht am Absender, sondern daran, dass sie aus der Konserve kommt. Der Platzhalter gilt in jedem Textfeld der Bibliothek, siehe README.

Beispiele (4)

Tutorial — die Bedienung lernen

Zwei Nachrichten, die verraten, was sie sind. Hier geht es nicht ums Erkennen, sondern darum, was ein Tipp, eine Entscheidung und eine markierte Stelle sind — deshalb sind die Tipps hier umsonst.

Tutorial. Lesen Sie die Nachricht, holen Sie sich den Tipp — hier kostenlos — und entscheiden Sie: Echt oder Phishing. Danach leuchten die verräterischen Stellen im Text auf, jede mit einer Ziffer, und darunter steht, was sie bedeutet.

Beurteilt: 0 von 2 · Punkte: 0 von 20
Posteingang2

Tutorial

Von: PHISHING BETRÜGER <phishing.tutorial@evilcorp.xyz>

An: Maria Schuster <m.schuster@kmu.de>

Dies ist eine Phishing-Mail. Klicken Sie unten auf Phishing, um sie als solche zu kennzeichnen.

Ihre Einschätzung

Level 1 — die offensichtlichen

Sechs Nachrichten, drei Angriffe. Zwei tragen denselben Betreff, und nur eine davon ist echt. Der Tipp kostet Punkte.

Level 1. Sechs Nachrichten aus einem Arbeitstag, drei davon Angriffe. Zwei tragen denselben Betreff — eine davon ist echt. Der Tipp kostet Punkte, die Entscheidung gilt.

Beurteilt: 0 von 6 · Punkte: 0 von 60
Posteingang6

Passwort-Policy: Ablauf Ihres Passworts in 20 Tagen

Von: Mailversand Adminconsole <mailversand.adminconsole@sdkljf.evilcorp.xyz>

An: Maria Schuster <m.schuster@kmu.de>

Sehr geehrte Dame, sehr geehrter Herr, Ihr Passwort des Windows-Benutzeraccounts läuft in 5 Tagen ab. Wenn dieses abgelaufen ist können Sie Ihren Account nicht mehr verwenden. Denken Sie daran, dieses in nächster Zeit zu ändern! Ein Ändern des Passworts ist über unsere Webseite möglich — dort rechts in der Infobox „Passwort ändern“ klicken. Viele Grüße Ihr IT-Team

kmu.de/it-service

Ihre Einschätzung

Level 2 — die gut gemachten

Sechs Nachrichten, vier Angriffe. Zwei Paare tragen denselben Betreff und fast denselben Text; der Unterschied steht in der Adresse, im Linkziel oder in der Dateiendung.

Level 2. Diesmal verrät sich keine Nachricht auf den ersten Blick. Zwei Paare tragen denselben Betreff und fast denselben Text — der Unterschied steht in der Adresse, im Linkziel oder in der Dateiendung.

Beurteilt: 0 von 6 · Punkte: 0 von 60
Posteingang6

WG: Resturlaub 2025

Von: Personalabteilung <Personalabteilung@κmυ.de>

An: Maria Schuster <m.schuster@kmu.de>

Guten Tag Maria Schuster, als Arbeitgeber haben wir die Pflicht, Ihnen Ihren aktuellen Urlaubsstand und die Verfallsfristen mitzuteilen. Ihnen steht noch Resturlaub (einschließlich eventuellem Zusatzurlaub) aus dem vergangenen Jahr zu. Ihr Urlaubsanspruch aus dem Vorjahr beträgt 8 Tage (Stand: 24.10.2026). Bitte setzen Sie sich umgehend mit uns in Verbindung, um Ihren Resturlaub rechtzeitig und in vollem Umfang zu planen. Sofern Sie Ihren Anspruch auf Resturlaub nicht oder nicht vollständig bis zum Ende des Übertragungszeitraumes am 07.11.2026 in Anspruch nehmen, verfällt er ersatzlos gemäß den geltenden Vorschriften!

Ihre Einschätzung

Ohne Fenster, ohne Punkte

`client: false` nimmt den Postfach-Rahmen weg — in einer schmalen Spalte ist die aufklappbare Liste das Ruhigere. Dazu ohne Punktestand, Tipps umsonst, Auflösung erst am Ende.

Zwei Nachrichten. Entscheiden Sie — die Auflösung kommt, wenn beide beurteilt sind.

Beurteilt: 0 von 2

Ihre Sendung konnte nicht zugestellt werden

Von: Paketdienst <info@paket-status.shop>

Ihre Sendung wartet im Depot. Bitte bestätigen Sie die Zustellgebühr von 2,99 €, sonst geht die Sendung zurück.

Zustellung bestätigen

Ihre Einschätzung

API

Vollständig aus den Quellen erzeugt. Dieselben Angaben stehen an jedem Beispiel hinter dem Knopf API — hier ausgeschrieben, damit sie über die Seitensuche und im Druck auffindbar bleiben.

Props

PropTypStandardBedeutung
idPflichtstring—Eindeutig im Dokument. Schlüssel für den gespeicherten Stand.
taskstring—Die Aufgabenstellung. Inline-Markdown erlaubt.
itemsLmsPhishingMail[]() => []Wiederholte Kinder.

Ein Eintrag besteht aus:

  • to?string — Das Empfängerfeld. * * Steht nur hier und nicht an `LmsMailItem`: Die anderen beiden Bausteine * zeigen es nicht, und ein Feld, das nirgends erscheint, verspricht etwas. * Hier ist es eines der neun Merkmale — ein Verteiler im An-Feld verrät den * Massenversand.
  • marks?LmsPhishingMark[] — Die verräterischen Stellen. Auch echte Nachrichten haben welche — siehe `LmsPhishingQuiz`.
  • hint?string — Der Tipp vor der Entscheidung. * * Ohne Angabe bildet der Baustein ihn aus den Merkmalen der markierten * Stellen: „Achten Sie auf Absender und Anrede." Das genügt meistens und * hält den Inhalt knapp.
  • fromstring — Angezeigter Absendername.
  • address?string — Die tatsächliche Absenderadresse.
  • subjectstring
  • preview?string — Vorschauzeile in der Liste.
  • body?string — Der Nachrichtentext. Inline-Markdown erlaubt.
  • logo?string — Der Briefkopf über dem Nachrichtentext — in vielen Angriffen die eigentliche Verkleidung.
  • logoAlt?string — Alternativtext des Briefkopfs. Ohne Angabe gilt `from`.
  • links?LmsMockLink[]
  • attachment?LmsMockAttachment
  • spf?string — Ergebnis der Absenderprüfung, z. B. "pass", "fail", "softfail".
  • dkim?string
  • legit?boolean — Ist die Nachricht echt? Maßgeblich für die Auswertung in LmsMailTriage.
  • signs?string[] — Woran man es erkennt. Erscheint in der Auflösung. Inline-Markdown erlaubt.
scorebooleantruePunktestand zeigen und zählen.
pointsLmsPhishingPunkte—Was die vier Fälle und ein Tipp wert sind. Fehlende Werte bleiben auf der Vorgabe.

Ein Eintrag besteht aus:

  • caught?number — Angriff erkannt.
  • missed?number — Angriff übersehen — der teure Fehler.
  • trusted?number — Echte Nachricht als echt erkannt.
  • falseAlarm?number — Fehlalarm auf eine echte Nachricht.
  • hint?number — Was ein Tipp kostet.
hints'cost' | 'free' | 'off''cost'`cost` kostet Punkte (Vorgabe), `free` ist umsonst, `off` nimmt die Tipps weg.
reveal'answered' | 'wrong' | 'end''answered'Wann die markierten Stellen aufleuchten.
addresseestring—Name der angesprochenen Person — ersetzt `{name}` in allen Textfeldern.
clientbooleantrueAls Postfach-Fenster zeichnen: Titelleiste, Nachrichtenliste links, * Lesebereich rechts. * * Abschaltbar, weil es nicht überall passt. In einer schmalen Spalte — ein * Nugget ist rund 700 Pixel breit — wird aus zwei Bereichen schnell ein * Gedränge; dann ist die aufklappbare Liste das Ruhigere. Und wer den * Baustein in einen Abschnitt stellt, der ohnehin schon einen Rahmen hat, * will keinen zweiten.
reset'ask' | 'off' | 'free''ask'`ask` fragt nach (Vorgabe), `off` nimmt den Knopf weg, `free` fragt nicht.

Slots

Dieser Baustein hat keine Slots — sein Inhalt kommt vollständig aus den Props.

Emits

Dieser Baustein sendet keine Events.

Theme

Dieser Baustein hat keine Fläche in der app.config.ts.

Sein Aussehen steuerst du über Props — bei den didaktischen Bausteinen über das gemeinsame Farbrollen-Vokabular (color, variant), bei den dekorativen über deren eigene Props. Eine Theming-Ebene wie ui.<komponente> in Nuxt UI gibt es hier noch nicht.

Changelog

  1. Hinzugefügt1.31.0

    Briefkopf in der Nachricht (logo, Alternativtext logoAlt). Ein eigenes Feld und kein Bild im Rumpf, denn der Nachrichtentext läuft escaped durch LmsMarkdown. Didaktisch ist das Logo die Verkleidung selbst — es ist eine Datei, in zehn Sekunden kopiert, und beweist nichts. Die Bankmail in Level 1 trägt eine erfundene Marke („Kreisbank Auental“), wo die Vorlage das echte Logo einer bestehenden Sparkasse setzt — eine Bibliothek liefert ihre Beispiele mit aus. Für den echten Kurs gehört hierhin die Marke, die der Angriff nachahmt; die Abweichung steht im Erklärtext der Seite

  2. Hinzugefügt1.31.0

    Das Beispiel folgt jetzt dem Aufbau der Vorlage: Tutorial, dann das Spiel mit Level 1 und Level 2, als drei Bausteine mit eigener id. Im Tutorial zwei Nachrichten, die selbst sagen, was sie sind, mit kostenlosen Tipps (hints: free) und Markierungen, die erklären, was eine Markierung ist; in den beiden Leveln je sechs Nachrichten aus dem Bestand des BAK-PhishingQuiz, Tipps gegen Punktabzug. Beide Level arbeiten mit Zwillingen — dieselbe Nachricht einmal echt, einmal gefälscht (Passwort-Policy in Level 1, Resturlaub und Zeiterfassung in Level 2): Wer am Thema entscheidet, liegt bei einem der beiden zwangsläufig falsch. Level 1 nimmt die offensichtlichen Angriffe (Bank mit angehängter .de.eu-Domäne, Vorschussbetrug an den eigenen Verteiler), Level 2 die gut gemachten — griechische Buchstaben in κmυ.de, ein angehängtes intranet.kmu.de.eurzokde.com, ein @ mitten in einer GitHub-Adresse und Invoice_1375.pdf.exe. Einmal steht der Tippfehler in der echten Nachricht, weil der Angreifer ihn beim Abschreiben ausgebessert hat. Jahreszahlen, Stichtag und Verfallsfrist stehen als …, damit das Beispiel nicht veraltet. Das bisherige Beispiel „Vier Nachrichten, markierte Stellen“ geht darin auf

  3. Hinzugefügt1.29.0

    Meldet seinen Stand an den Fortschrittsadapter, nach jeder Entscheidung, nach einem Tipp und beim Zurücksetzen: answered/total, correct (alle richtig), score (Anteil richtiger Urteile) und neu points/maxPoints — der Punktestand samt Tippkosten und was höchstens zu holen war. Vorher wurden nur die Urteile gespeichert, ohne Einordnung

  4. Hinzugefügt1.26.0

    Entscheiden, und am Text sehen, woran man es erkannt hätte: Nach dem Urteil trägt jede verräterische Stelle eine Ziffer, darunter steht, was sie bedeutet. Neun Merkmale (Absender, Anrede, Druck, Linkziel, Anhang, Empfänger, Rechtschreibung, Datenabfrage, Zahlung), jedes mit zwei Erläuterungen — eine für die Fälschung, eine für die echte Nachricht, denn auch echte Post hat einen Kurzlink. Gezeichnet als Postfach-Fenster mit Nachrichtenliste und Lesebereich, mit client: false als aufklappbare Liste für schmale Spalten. Punkte (score, points), Tipps wahlweise mit Abzug, umsonst oder gar nicht (hints), Auflösung nach der Antwort, nur bei Fehlern oder erst am Ende (reveal: answered | wrong | end), addressee setzt {name} ein. Das Ziel eines Verweises erscheint beim Überfahren als Hinweis — und beim Fokussieren, also auch ohne Maus; ohne das ließe sich „Prüfen Sie das Linkziel“ nicht prüfen, was der Tipp aber verlangt. Nach der Entscheidung steht es zusätzlich ausgeschrieben in der Zeile, rot wenn es täuscht. Nach der Entscheidung steht über der Auflösung, ob sie stimmte — und wenn nicht, was die Nachricht war (phishing.verdictRight, verdictWasPhishing, verdictWasLegit); an dieselbe Bedingung gehängt wie die Markierungen, damit reveal: end nichts vorwegnimmt. Die Kopfzeile benennt ihre Zahlen, statt zwei Brüche nebeneinanderzustellen: „Beurteilt: 1 von 4 · Punkte: -12 von 40“. Am Schluss zählt die Bilanz nicht die richtigen Antworten, sondern die übersehenen Merkmale. Beschriftungen unter phishing.*. Übernommen aus dem PhishingQuiz der BAK-Spiele

  5. Behoben1.29.0

    Schreiben in den Fortschrittsspeicher geschieht je Schlüssel nacheinander, und zuletzt immer der neueste Stand. Vorher liefen Schreibvorgänge gleichzeitig, und der zuletzt fertige gewann: Ein Quiz blieb mit dem Stand von vor „Antwort prüfen“ stehen, eine Reflexion (Freitext, je Tastendruck geschrieben) konnte mit abgeschnittenem Text enden

  6. Hinzugefügt1.29.0

    useLmsProgress nimmt als viertes Argument beimLaden: gerufen, wenn ein gespeicherter Stand angekommen ist

  7. Hinzugefügt1.29.0

    LmsProgressMeta kennt points und maxPoints für Bausteine, die Punkte zählen. score bleibt der Anteil richtiger Antworten; Punkte gewichten anders und dürfen negativ sein

  8. Hinzugefügt1.28.0

    Überarbeitungen: Werkzeug untertitel_erzeugen (nur auf Hinweis der Redaktion). Die Brücke holt Videos ohne subtitles-src über ki-auftrag-video der Plattform, schreibt mit WhisperNotes medien/<kennung>.srt und trägt es ein; wahlweise nur für bestimmte Nuggetdateien

  9. Hinzugefügt1.28.0

    Aufträge: Beim pruefen und abgeben schreibt die Brücke für jedes lms-video ohne subtitles-src, dessen Video im Paket liegt, mit ffmpeg und WhisperNotes ein .srt daneben und trägt es als subtitles-src ein (playground/server/utils/untertitel.ts). Ein zweiter Lauf tut nichts; ohne WhisperNotes bleibt das Paket, wie es ist, und der Agent erfährt es

  10. Hinzugefügt1.27.0

    Aufträge: Überarbeitung eines vorhandenen Lernpfads. Die Plattform gibt den Lernpfad als Paket mit (ausgang), die Brücke legt ihn nach paket/ und unverändert nach bestand/. Zwei Werkzeuge mehr: plan_vorlegen und rueckfrage warten auf die Antwort der Redaktion, die die Brücke bei der Plattform abholt (ki-auftrag-frage, ki-auftrag-antwort) — Antworten geht so auch aus einem anderen Fenster. Endet ein Lauf ohne Abgabe, meldet die Brücke das

  11. Hinzugefügt1.27.0

    Brücke: POST /api/editor/ki/abschreiben schreibt eine Sprachnotiz ab (ffmpeg + WhisperNotes), für fremde Gastgeber freigegeben wie verfuegbar

  12. Hinzugefügt1.26.0

    Datum im Inhalt: 2026-10 wird beim Zeichnen gerechnet statt im Text zu stehen — vor dem zweiten Doppelpunkt der Versatz in Tagen, dahinter das Schema (JJJJ, JJ, MM, TT; englisch YYYY, YY, DD), beides entbehrlich. Der Versatz zählt Tage, mit angehängtem j/y Jahre — nötig, wo im Inhalt eine Zahl danebensteht: Im Passwort-Beispiel steht Luna2021! neben „Luna wird heute 5!“, und 5 × 365 Tage lägen nach einem Schaltjahr im falschen Jahr. Ohne Schema gilt das der Sprache, content.dateFormat, überschreibbar wie jede Beschriftung. Wirkt in jedem Textfeld, das durch LmsMarkdown läuft, und zusätzlich in den reinen Textfeldern der Mail-Attrappen (Betreff, Absender, Adresse, Vorschauzeile, Linkziel, Anhangsname) in LmsPhishingQuiz, LmsMailTriage und LmsMockMail. Damit veraltet ein Beispiel nicht mehr: Eine Phishing-Mail mit einer Rechnungsnummer von vorgestern ist glaubwürdig, eine von 2024 verrät sich an der falschen Stelle. Der Tag kommt aus useStichtag() — auf dem Server gerechnet, über die Nutzlast in den Browser, dort einmal nachgebessert, damit auch eine vorgerenderte Seite nicht den Tag ihres Builds trägt. Geprüft von pnpm run datum-test. Auch dort eingesetzt, wo ein Feld nicht gerendert, sondern verglichen oder zerlegt wird: das gesuchte Passwort in LmsPasswordHunt und die Tage eines Rasters in LmsHeatmap — ein Raster mit festen Tagen zeigt nach zwölf Wochen nichts mehr

  13. Hinzugefügt1.25.0

    Aufträge: Folien, Word-Seiten und PDFs liegen zusätzlich als Seitenbilder im Auftragsordner (LibreOffice + pdftoppm, ausgeblendete Folien mit, damit die Nummern zum Textauszug passen) — der Textauszug kennt keine Anordnung, und Schaubilder gingen verloren

  14. Hinzugefügt1.25.0

    Aufträge über die Brücke (/_ws/ki-auftrag): Ein Agent baut aus hochgeladenem Material in einem eigenen Ordner ein Lernpfadpaket, prüft es bei der Plattform und gibt es dort ab; useLmsBausteinwissen() liefert ihm Katalog, Typen, Konventionen und Muster. laufeCodex() nimmt einen eigenen Arbeitsordner, der MCP-Kanal eine eigene Werkzeugliste

  15. Behoben1.16.2

    Die Umbrüche richten sich nach der eigenen Breite, nicht nach dem Fenster. Nach LmsHeader sind die übrigen 28 Bausteine mit sm:/md:/lg: nachgezogen: Raster, Seitenspalten und Zeilenumbrüche fragen jetzt per @container ihren eigenen Platz ab

  16. Hinzugefügt1.15.0

    Die eingebauten Beschriftungen gibt es auf Englisch. Gewählt wird über lms.sprache in der app.config.ts (de oder en); labels gilt weiterhin und liegt über der gewählten Sprache, so dass sich einzelne Texte weiter austauschen lassen

  17. Geändert0.7.0

    src/runtime/utils/totp.ts kommt hinzu: TOTP in reinem JavaScript, gegen die Testvektoren des RFC geprüft. Einzige Änderung gegenüber der Quelle sind Nicht-Null-Zusicherungen an den Feldzugriffen — der Bestand an @ts-nocheck bleibt bei 51, und keine Ausnahme liegt außerhalb von fx/

  18. Hinzugefügt0.6.0

    useLmsProgress: Fortschritt lässt sich speichern, ohne dass die Bibliothek ein Backend kennt. Das Zielprojekt hinterlegt einmal einen Adapter mit get/set, die Bausteine nutzen ihn, wenn er da ist — sonst halten sie den Stand im Speicher wie bisher. Ereignisse wären hier nutzlos: MDC kann keine Events abonnieren, und genau dort werden diese Bausteine benutzt

  19. Behoben0.4.0

    Die Warnung Slot "default" invoked outside of the render function erscheint nicht mehr. Der Katalog läuft jetzt mit 0 Fehlern und 0 Warnungen

  20. Hinzugefügt0.3.0

    Der MDC-Bereich jedes Beispiels ist jetzt ein Editor: Syntaxhervorhebung, Code-Vervollständigung aus der Registry, Prüfung in sechs Stufen und eine Vorschau, die beim Tippen mitläuft. Oben rechts Zurücksetzen und Kopieren

  21. Hinzugefügt0.3.0

    Die Prüfung meldet unbekannte Bausteine, unbekannte Props, fehlende Pflicht-Props, unbekannte Slots, Events (die MDC nicht abonnieren kann) und den Typkonflikt, an dem man in MDC am häufigsten hängenbleibt: Inline-Attribute sind immer Zeichenketten, {count=14} übergibt "14"

  22. Hinzugefügt0.2.0

    API-Ansicht je Baustein: Props, Slots, Emits, Theme und dieser Changelog. In der Demo-Hülle als Reiter hinter dem Knopf API, auf der Detailseite ausgeschrieben

  23. Hinzugefügt0.2.0

    Emits werden dokumentiert. Sie sind der Grund, warum sich manche Bausteine aus Markdown heraus nicht vollständig bedienen lassen: MDC kann keine Events abonnieren

  24. Geändert0.2.0

    Die Komponentenreferenz der README wird jetzt vollständig erzeugt statt von Hand gepflegt

  25. Geändert0.2.0

    Auch die Tabelle der optionalen Abhängigkeiten wird erzeugt. Sie war gedriftet: motion-v stand mit 50 statt 54 Komponenten darin, @uiw/color-convert unter „je 1", obwohl es drei sind

  26. Hinzugefügt0.1.0

    Erstveröffentlichung: 187 Bausteine in 17 Kategorien, davon 40 didaktische Lms- und 147 dekorative Fx-Bausteine aus Inspira UI