diff --git a/decnet_web/src/components/Dashboard.css b/decnet_web/src/components/Dashboard.css index aea8c118..0965d2e5 100644 --- a/decnet_web/src/components/Dashboard.css +++ b/decnet_web/src/components/Dashboard.css @@ -71,6 +71,22 @@ background: rgba(255, 65, 65, 0.1); } +/* Key-value chips in the live-feed event column. Values are unbounded + (attacker-supplied command strings, URLs, base64 payloads), so these + must wrap inside the chip rather than inherit the default nowrap — + otherwise a single `cmd: echo <2KB>` blows out the table width. */ +.chip.chip-kv { + white-space: normal; + word-break: break-word; + overflow-wrap: anywhere; + max-width: 100%; + align-items: flex-start; + line-height: 1.35; +} +.chip.chip-kv > .dim { + flex-shrink: 0; +} + /* Breach banner */ .breach-banner { background: rgba(255, 65, 65, 0.1); diff --git a/decnet_web/src/components/Dashboard.tsx b/decnet_web/src/components/Dashboard.tsx index 007eb0bd..21f71d17 100644 --- a/decnet_web/src/components/Dashboard.tsx +++ b/decnet_web/src/components/Dashboard.tsx @@ -359,8 +359,8 @@ const Dashboard: React.FC = ({ searchQuery }) => { {log.decky} {log.service} {log.attacker_ip} - -
+ +
{(() => { const et = log.event_type && log.event_type !== '-' ? log.event_type : null; @@ -378,7 +378,7 @@ const Dashboard: React.FC = ({ searchQuery }) => { })()}
{Object.keys(parsedFields).length > 0 && ( -
+
{parsedFields.stored_as != null && (
)}