In my game, I changed the list of players from canvas to html, due to which a vulnerability appeared that any player can give himself a name into which he can insert js code, for example, <script>alert(1);</script>
which will work for all players when the player appears in the player list. The question is, how to make html not work and everything that the player enters is displayed as text? The pre
tag in html didn't help me :(
The code for adding a player to the player list:
const drawLeaderboard = function() {
if (!settings.showLeaderboard || !leaderboard.items) return wjQuery('#leaderboard').css('display', 'none');
else wjQuery('#leaderboard').css('display', 'block');
let text, vip = false,
isMe = false;
const texts = {
all: '',
emoji: ''
};
for (let i = 0; i < leaderboard.items.length; i++) {
if (leaderboard.type == 'text')
text = leaderboard.items[i];
else
text = leaderboard.items[i].name,
isMe = leaderboard.items[i].me,
vip = leaderboard.items[i].vip;
texts.all += `<div class="item"${isMe ? 'style="color: #faa;"' : ''}>${text.trim()}</div>`;
texts.emoji += `<div class="item">${vip ? '' : ''}</div>`;
}
wjQuery('#leaderboard > .content > .items').html(texts.all);
wjQuery('#leaderboard > .content > .emoji').html(texts.emoji);
}