在我的游戏中,我将玩家列表从画布更改为HTML格式,这导致出现了一个漏洞,任何玩家都可以为自己取一个名字,并且在名字中插入JS代码,例如:
向玩家列表中添加玩家的代码:
<script>alert(1);</script>
当玩家出现在玩家列表中时,这段代码会对所有的玩家起作用。问题是,如何使HTML不起作用,让玩家输入的所有内容都显示为文本?HTML中的pre
标签没有帮助到我 :(向玩家列表中添加玩家的代码:
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);
}