feed.js: HTML-Injection in linkify schließen (escapeHtml deckt nun Quotes ab)
escapeHtml nutzte den textContent->innerHTML-Trick, der laut HTML-Spec nur & < > escaped, aber keine Anführungszeichen (in Textknoten harmlos). linkify steckt den Wert anschließend in ein href="..."-Attribut, wo ein rohes " das Attribut vorzeitig schließt und beliebige Attribute (on...=, style=) am <a> einschleusbar macht -- HTML-Injection. Die CSP (default-src 'self', kein 'unsafe-inline') verhinderte nur die Ausführung, nicht die Injektion. Ersetzt durch einen spec-korrekten Entity-Escaper, der auch " und ' abdeckt, sodass der Wert in Text- UND Attributkontext sicher ist. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+9
-3
@@ -15,10 +15,16 @@ const api = {
|
||||
},
|
||||
};
|
||||
|
||||
// Escaped für Text- UND Attributkontext. Der frühere textContent->innerHTML-
|
||||
// Trick ließ Anführungszeichen stehen (in Textknoten harmlos); linkify steckt
|
||||
// den Wert aber in ein href="..."-Attribut, wo ein " ausbrechen würde.
|
||||
function escapeHtml(s) {
|
||||
const d = document.createElement("div");
|
||||
d.textContent = s ?? "";
|
||||
return d.innerHTML;
|
||||
return String(s ?? "")
|
||||
.replace(/&/g, "&")
|
||||
.replace(/</g, "<")
|
||||
.replace(/>/g, ">")
|
||||
.replace(/"/g, """)
|
||||
.replace(/'/g, "'");
|
||||
}
|
||||
|
||||
// avatarUrl liefert den Bildpfad oder das Platzhalterbild bei leerem Avatar.
|
||||
|
||||
Reference in New Issue
Block a user