Skip to content

Commit bfbada2

Browse files
authored
Fix: Prevent XSS vulnerability in Password Manager table rendering (#7600)
Fix: Sanitize user inputs to prevent DOM-based XSS
1 parent 751bcc6 commit bfbada2

1 file changed

Lines changed: 24 additions & 9 deletions

File tree

‎public/password manager/script.js‎

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,24 @@ document.addEventListener("DOMContentLoaded", () => {
5151
updateStats();
5252
});
5353

54-
/* =========================================================
55-
THEME TOGGLE
56-
========================================================= */
54+
/* -------------------- */
55+
/* Security Helpers */
56+
/* -------------------- */
57+
58+
function escapeHTML(str) {
59+
if (!str) return "";
60+
return str.replace(/[&<>'"]/g, tag => ({
61+
'&': '&amp;',
62+
'<': '&lt;',
63+
'>': '&gt;',
64+
"'": '&#39;',
65+
'"': '&quot;'
66+
}[tag]));
67+
}
68+
69+
/* -------------------- */
70+
/* Toast Notification */
71+
/* -------------------- */
5772

5873
function initializeTheme() {
5974
const savedTheme = localStorage.getItem(THEME_KEY);
@@ -331,13 +346,13 @@ async function addEntry() {
331346
const password =
332347
document.getElementById("password").value;
333348

334-
const category =
335-
document.getElementById("category")
336-
?.value || "Personal";
349+
<td>
350+
${escapeHTML(item.website)}
351+
</td>
337352

338-
const favorite =
339-
document.getElementById("favorite")
340-
?.checked || false;
353+
<td>
354+
${escapeHTML(item.username)}
355+
</td>
341356

342357
const errEl =
343358
document.getElementById("form-error");

0 commit comments

Comments
 (0)