30 lines
1.2 KiB
JavaScript
30 lines
1.2 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.
|
|
var message = form.getAttribute && form.getAttribute("data-confirm");
|
|
if (!message) {
|
|
return;
|
|
}
|
|
|
|
if (!window.confirm(message)) {
|
|
// preventDefault verhindert, dass der Browser das Formular abschickt.
|
|
event.preventDefault();
|
|
}
|
|
});
|