socket.addEventListener("message", (event) => {
const item = document.createElement("li");
item.textContent = event.data;
document.querySelector("#messages").appendChild(item);
});

JSON形式で受信したデータも、安全とは限りません。
危険な例です。
const response = await fetch("/api/profile/");
const profile = await response.json();
document.querySelector("#name").innerHTML = profile.display_name;
JSONは転送形式です。
JSONであることは、HTMLとして安全であることを意味しません。

Web Storageへ保存された値を、後から危険なSinkへ渡すとXSSになります。
URLパラメーター
↓
localStorageへ保存
↓
別画面で読み込み
↓
innerHTMLへ代入