fix(security): replace dangerouslySetInnerHTML with safe React rendering in ChartStyle - #548
Conversation
- Replace localStorage plaintext UUID storage with salted hash - Add per-session salt stored in sessionStorage - Add synchronous hash function for device identity - Update tests to verify hashed storage behavior Closes MettaChain#448
- Add /api/security/address-check Next.js API route to proxy Chainalysis requests - Remove API key exposure from browser via window global (__CHAINALYSIS_API_KEY__) - Move API key to server-only CHAINALYSIS_API_KEY env variable - Add security:check-globals npm script to prevent future __ global leaks - Update tests to verify proxy endpoint usage Closes MettaChain#442
…ing in ChartStyle - Remove dangerouslySetInnerHTML usage in chart.tsx ChartStyle component - Use React's built-in text content escaping via JSX children - Filter empty CSS rules to prevent rendering empty style tags - CSS content is automatically HTML-escaped by React's text node rendering Closes MettaChain#439
|
@danieloche635-bit Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits. You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀 |
|
Subsumed by #560 — same files. Closing this duplicate. |
nanaf6203-bit
left a comment
There was a problem hiding this comment.
Thanks @danieloche635-bit — replacing dangerouslySetInnerHTML with safe React rendering in ChartStyle is solid XSS defense for #439. This PR has merge conflicts against main, so could you rebase and resolve before we land it? 🎨
|
Hi @danieloche635-bit — same note as the others: this one needs a rebase against latest main. Could you resolve the conflicts and push an update? Ill merge as soon as its green. Thanks! |
Summary (P1)
\ChartStyle\ component used \dangerouslySetInnerHTML\ to inject CSS with color values from the chart config, creating a potential XSS vector if config values ever accept external input.
Changes
Security
React's JSX text content is always escaped, preventing HTML injection even if config values contain malicious strings. This is fundamentally safer than \dangerouslySetInnerHTML\ which bypasses React's escaping entirely.
Closes #439