Skip to content

Escape dashboard HTML payload before rendering#22

Merged
frantic-openai merged 1 commit intomainfrom
frantic/mt-897-stored-xss-in-dashboard-html
Mar 3, 2026
Merged

Escape dashboard HTML payload before rendering#22
frantic-openai merged 1 commit intomainfrom
frantic/mt-897-stored-xss-in-dashboard-html

Conversation

@frantic-openai
Copy link
Collaborator

Context

Prevent stored XSS in the dashboard root HTML endpoint by escaping JSON payload characters before rendering.

TL;DR

Escape dashboard JSON output before injecting it into the <pre> element.

Summary

  • Add HTML escaping in SymphonyElixir.HttpServer.render_dashboard/3.
  • Add regression coverage to verify <script> in dashboard payload is escaped.
  • Keep existing dashboard JSON payload shape for safe clients.

Alternatives

  • Continue rendering raw JSON and rely on downstream consumers; this remains unsafe for script injection.

Test Plan

  • mix test test/symphony_elixir/extensions_test.exs
  • make -C elixir all

@frantic-openai frantic-openai added the symphony Track Symphony work for codebase label Mar 3, 2026
@frantic-openai frantic-openai requested a review from Copilot March 3, 2026 23:40
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR mitigates stored XSS risk in the dashboard root HTML endpoint by HTML-escaping the JSON payload before rendering it into the dashboard <pre> block.

Changes:

  • Escape HTML-sensitive characters in SymphonyElixir.HttpServer.render_dashboard/3 before interpolating JSON into the HTML response.
  • Add a regression test ensuring <script> content in the dashboard payload is rendered escaped (not executable).

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

File Description
elixir/lib/symphony_elixir/http_server.ex Escapes the rendered dashboard JSON payload before embedding in HTML.
elixir/test/symphony_elixir/extensions_test.exs Adds an end-to-end regression test for HTML escaping in the dashboard root endpoint.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

You can also share your feedback on Copilot code review. Take the survey.

@frantic-openai frantic-openai merged commit ccced0a into main Mar 3, 2026
6 checks passed
@frantic-openai frantic-openai deleted the frantic/mt-897-stored-xss-in-dashboard-html branch March 3, 2026 23:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

symphony Track Symphony work for codebase

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants