← back to Greenwallcoverings
corner-nav: block javascript:/data: URIs in search preview (URL-scheme allowlist)
4d29c32c020a41b17b069bdc236c9d71cb18811f · 2026-07-29 09:58:11 -0700 · Steve Abrams
Files touched
Diff
commit 4d29c32c020a41b17b069bdc236c9d71cb18811f
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 { '&': '&', '<': '<', '>': '>', '"': '"' }[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) {
← e0b69ce search: /api matcher now covers title+tags+description+type+
·
back to Greenwallcoverings
·
search: scroll results into view on mobile (grid was below t 53904ce →