Set clickjacking headers on Render (X-Frame-Options / frame-ancestors) #3
Labels
No labels
agent:implement
agent:ready
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
ready
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
code/CL8Y-web#3
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
After merging !8 / closing #1, production still does not send clickjacking defenses.
PROJECT_GUIDE.md§15b andskills/cl8y-site-positioning/invariants.mddocument that this static SPA should sendX-Frame-Options: DENYorContent-Security-Policy: frame-ancestors 'none'.render.yamlhas no headers today. The marketing page must not become a frameable wallet/connect surface.This is host config on Render (and any CDN in front), not homepage copy.
Related: leftover CEX rows in
src/data/links.tsstay with #2 (token directory). Do not remount retired homepage modules.Acceptance criteria
cl8y.com(and preview if used) includeX-Frame-Options: DENYand/orContent-Security-Policywithframe-ancestors 'none'.render.yaml(or the Render dashboard equivalent) is the source of truth so a fresh deploy keeps the header.PROJECT_GUIDE.mdonce confirmed (curl -I against production).Test plan
curl -sI https://cl8y.com(and the Render URL) shows the header./is blocked by the browser.mainand re-check so the header is not dashboard-only drift.Out of scope
marked as related to #1
mentioned in issue #1
mentioned in merge request !9
mentioned in merge request !10
Clickjacking headers are included in !10 (
render.yamlkeeps blog rewrites). Productioncurl -sIconfirmation is still needed after deploy.mentioned in issue #4
mentioned in commit
b124356850mentioned in issue #2
Merge review (2026-08-26)
Clickjacking headers from !10 are now on GitLab
maininrender.yaml(X-Frame-Options: DENYandContent-Security-Policy: frame-ancestors 'none'on/*, blog rewrites kept). No wallet-connect widget was added.Not yet done (needs a live deploy):
curl -sI https://cl8y.comtoday is nginx (last-modified: Mon, 22 Jun 2026) and does not sendX-Frame-Optionsorframe-ancestors.Opened a follow-up issue for the production confirmation + PROJECT_GUIDE note.
mentioned in issue #5
marked as related to #5
mentioned in issue #7