← back to Customdigitalmurals
add noreferrer to every target=_blank external link
58420cb43fdf3ada98112d806e460760983941f7 · 2026-05-19 15:14:05 -0700 · Steve Abrams
Four off-site links (DW footer, card sample CTA, product-page sample CTA,
product-page DW deep-link) had rel="noopener" but not noreferrer. Tabnabbing
protection without referrer leak prevention is half a fix; upgrade all four
to rel="noopener noreferrer" so the destination can't see the source URL on
the way in.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Files touched
Diff
commit 58420cb43fdf3ada98112d806e460760983941f7
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Tue May 19 15:14:05 2026 -0700
add noreferrer to every target=_blank external link
Four off-site links (DW footer, card sample CTA, product-page sample CTA,
product-page DW deep-link) had rel="noopener" but not noreferrer. Tabnabbing
protection without referrer leak prevention is half a fix; upgrade all four
to rel="noopener noreferrer" so the destination can't see the source URL on
the way in.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---
server.js | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/server.js b/server.js
index 82bb6da..ce39fb7 100644
--- a/server.js
+++ b/server.js
@@ -331,7 +331,7 @@ function footerHtml() {
<div class="brand-block">Custom Digital Murals</div>
<div class="links">
<a href="mailto:info@customdigitalmurals.com">info@customdigitalmurals.com</a>
- <a href="https://designerwallcoverings.com" target="_blank" rel="noopener">Order via DW</a>
+ <a href="https://designerwallcoverings.com" target="_blank" rel="noopener noreferrer">Order via DW</a>
</div>
<div class="tagline">Printed-to-order · Free memo samples · Trade service available</div>
</footer>`;
@@ -432,7 +432,7 @@ function load(){
'<div class="card-vendor">'+esc(p.vendor)+'</div>'+
'<div class="card-title">'+esc(p.title)+'</div>'+
(price?'<div class="card-price">'+price+'</div>':'')+
- '<a class="card-sample" href="'+esc('https://designerwallcoverings.com/products/'+p.handle+'#sample')+'" onclick="event.stopPropagation()" target="_blank" rel="noopener">Order Free Sample</a>'+
+ '<a class="card-sample" href="'+esc('https://designerwallcoverings.com/products/'+p.handle+'#sample')+'" onclick="event.stopPropagation()" target="_blank" rel="noopener noreferrer">Order Free Sample</a>'+
'</div>'+
'</div>';
}).join('');
@@ -518,8 +518,8 @@ ${headerHtml('')}
<h1>${escHtml(p.title)}</h1>
<div class="price">${escHtml(price)}</div>
${prose ? `<div class="body-prose">${escHtml(prose)}</div>` : ''}
- <a class="sample-cta" href="${escHtml(sampleUrl)}" target="_blank" rel="noopener">Order Memo Sample (free)</a>
- <a class="dw-link" href="${escHtml(dwUrl)}" target="_blank" rel="noopener">View on Designer Wallcoverings →</a>
+ <a class="sample-cta" href="${escHtml(sampleUrl)}" target="_blank" rel="noopener noreferrer">Order Memo Sample (free)</a>
+ <a class="dw-link" href="${escHtml(dwUrl)}" target="_blank" rel="noopener noreferrer">View on Designer Wallcoverings →</a>
${tags.length ? `<div class="tags">${tags.map(t => `<span class="tag">${escHtml(t)}</span>`).join('')}</div>` : ''}
${imgs.length > 1 ? `<div style="display:grid;grid-template-columns:repeat(3,1fr);gap:4px;margin-top:28px;">${imgs.slice(1,4).map(img => `<img src="${escHtml(img)}" alt="${escHtml(p.title)}" loading="lazy" style="width:100%;aspect-ratio:1;object-fit:cover;">`).join('')}</div>` : ''}
</div>
← 48db475 sort + density persist to localStorage; hydrate before first
·
back to Customdigitalmurals
·
guard against serving .bak/.pre- snapshot files; widen .giti 58bcf6a →