munin/static/confirm.js
2026-10-19 10:13:56 +02:00

36 lines
1.6 KiB
JavaScript

// Fragt vor dem Absenden bestimmter Formulare nach einer Bestätigung.
//
// Früher stand die Abfrage direkt im HTML:
//
// <button onclick="return confirm('Wirklich löschen?')">
//
// Das funktioniert nicht mehr, seit der Server eine Content-Security-Policy
// schickt (siehe middleware/security.go). Die verbietet Inline-JavaScript —
// und zwar aus gutem Grund: Kann der Browser nicht unterscheiden, ob ein Stück
// Code vom Entwickler oder von einem Angreifer stammt, ist jede XSS-Lücke sofort
// ausnutzbar. Die Regel "Skripte nur aus eigenen Dateien" macht diesen
// Unterschied maschinell prüfbar.
//
// Die Bestätigung steht deshalb jetzt als data-confirm-Attribut am Formular,
// und dieses Skript hängt sich daran.
document.addEventListener("submit", function (event) {
var form = event.target;
// closest() sucht vom Element aufwärts nach dem passenden Vorfahren —
// hier reicht das Formular selbst, aber so bleibt es robust.
// event.submitter ist der Knopf, mit dem abgeschickt wurde. Hat ein
// Formular mehrere Knöpfe (etwa im Papierkorb: "wiederherstellen" und
// "endgültig löschen"), kann so jeder Knopf seine eigene Rückfrage
// haben — oder gar keine. Steht am Knopf nichts, gilt die des Formulars.
var btn = event.submitter;
var message = (btn && btn.getAttribute("data-confirm")) ||
(form.getAttribute && form.getAttribute("data-confirm"));
if (!message) {
return;
}
if (!window.confirm(message)) {
// preventDefault verhindert, dass der Browser das Formular abschickt.
event.preventDefault();
}
});