[object Object]

← back to Jutewallpaper

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

fbe0924db052bacdb386c3bfa4388a60fda504ae · 2026-07-29 09:58:11 -0700 · Steve Abrams

Files touched

Diff

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

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

diff --git a/public/corner-nav.js b/public/corner-nav.js
index 5f6d493..ca74b20 100644
--- a/public/corner-nav.js
+++ b/public/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) {

← 87afb9d search: /api matcher now covers title+tags+description+type+  ·  back to Jutewallpaper  ·  search: scroll results into view on mobile (grid was below t ba153e7 →