From 855fc9c9c85720b5e0c6b9086083165492e2a864 Mon Sep 17 00:00:00 2001 From: erdgeist Date: Thu, 16 Jul 2026 17:15:54 +0200 Subject: Construct DOM elements using escaping helpers to prevent XSS --- public/javascripts/admin_search.js | 30 ++++++++++++++---------------- public/javascripts/related_assets.js | 9 +++------ 2 files changed, 17 insertions(+), 22 deletions(-) (limited to 'public/javascripts') diff --git a/public/javascripts/admin_search.js b/public/javascripts/admin_search.js index 7604bb7..d135503 100644 --- a/public/javascripts/admin_search.js +++ b/public/javascripts/admin_search.js @@ -72,24 +72,20 @@ function initSearchPicker(options) { found = false; for (var i = 0; i < data.length; i++) { (function(node) { - var link; + var anchor = $("").attr("href", onSelect ? "#" : node.node_path); + anchor.append(document.createTextNode(node.title || "")); + anchor.append($("", { "class": "result_path" }).text(node.unique_name || "")); + var link = $("

").append(anchor); + if (onSelect) { - link = $( - "

" + node.title + - "" + node.unique_name + "

" - ); - link.find("a").bind("click", function() { + anchor.bind("click", function() { onSelect(node); results.slideUp(); results.empty(); return false; }); - } else { - link = $( - "

" + node.title + - "" + node.unique_name + "

" - ); } + results.append(link); found = true; })(data[i]); @@ -150,7 +146,9 @@ dashboard_search = { results.append("

Tags

"); var tag_row = $("
"); data.tags.forEach(function(tag) { - tag_row.append("" + tag.name + ""); + tag_row.append( + $("", { "class": "search_tag_pill" }).attr("href", tag.tag_path).text(tag.name || "") + ); found = true; }); results.append(tag_row); @@ -159,10 +157,10 @@ dashboard_search = { if (data.nodes.length) { results.append("

Pages

"); data.nodes.forEach(function(node) { - results.append( - "

" + node.title + - "" + node.unique_name + "

" - ); + var anchor = $("").attr("href", node.node_path); + anchor.append(document.createTextNode(node.title || "")); + anchor.append($("", { "class": "result_path" }).text(node.unique_name || "")); + results.append($("

").append(anchor)); found = true; }); } diff --git a/public/javascripts/related_assets.js b/public/javascripts/related_assets.js index 803332f..3340fa7 100644 --- a/public/javascripts/related_assets.js +++ b/public/javascripts/related_assets.js @@ -15,12 +15,9 @@ related_assets = { renderResults: function(data, results) { var found = false; data.forEach(function(asset) { - var item = $( - "" + - "" + - "" + asset.name + "" + - "" - ); + var item = $("", { href: "#", "class": "related_asset_result" }); + item.append($("", { src: asset.thumb_url, alt: "" })); + item.append($("").text(asset.name || "")); item.bind("click", function() { related_assets.attach(asset.id, createUrl, list); return false; -- cgit v1.3