[object Object]

← back to Glassbeadedwallpaper

corner-nav: block javascript:/data: URIs in search preview (URL-scheme allowlist)

33c05ec797987dad1ed51a0d7339da8b1313d248 · 2026-07-29 09:58:11 -0700 · Steve

Files touched

Diff

commit 33c05ec797987dad1ed51a0d7339da8b1313d248
Author: Steve <steve@designerwallcoverings.com>
Date:   Wed Jul 29 09:58:11 2026 -0700

    corner-nav: block javascript:/data: URIs in search preview (URL-scheme allowlist)
---
 corner-nav.js | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/corner-nav.js b/corner-nav.js
index 5f6d493..ca74b20 100644
--- a/corner-nav.js
+++ b/corner-nav.js
@@ -202,10 +202,17 @@
       return { '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;' }[c];
     });
   }
+  function cnSafeUrl(u) {
+    u = String(u == null ? '' : u).trim();
+    if (!u) return '';
+    var m = u.match(/^([a-z][a-z0-9+.\-]*):/i);
+    if (m && !/^https?$/i.test(m[1])) return '#'; // block javascript:, data:, vbscript:, ...
+    return u;
+  }
   function resHref(p) {
-    return p.product_url || p.url || (p.handle ? '/products/' + p.handle : '#');
+    return cnSafeUrl(p.product_url || p.url || (p.handle ? '/products/' + p.handle : '#'));
   }
-  function resImg(p)   { return p.image_url || p.image || p.featured_image || p.thumbnail || ''; }
+  function resImg(p)   { return cnSafeUrl(p.image_url || p.image || p.featured_image || p.thumbnail || ''); }
   function resTitle(p) { return p.title || p.name || p.sku || 'Untitled'; }
 
   function renderResults(items, q) {

← 2d6c0ad corner-nav: live as-you-type search with thumbnail previews  ·  back to Glassbeadedwallpaper  ·  Wire DW Meta Pixel 1431180262113856 + DW-network ad slot [ad 69bb4f2 →