javascript - 将 html 显示为文本

标签 javascript html jquery

这个问题在这里已经有了答案:





Escaping HTML strings with jQuery

(27 个回答)


8 个月前关闭。




在我的游戏中,我将玩家列表从canvas更改为html,因此出现了一个漏洞,任何玩家都可以给自己起一个可以插入js代码的名字,例如,<script>alert(1);</script>当玩家出现在玩家列表中时,这将适用于所有玩家。问题是,如何让 html 不起作用,而玩家输入的所有内容都显示为文本? pre html中的标签对我没有帮助:(
将播放器添加到播放器列表的代码:

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);
}

最佳答案

这是跨站点脚本的示例。我们可以通过使用正则表达式编码 HTML 实体来防止它。

var encodedStr = $('#inputText').replace(/[\u00A0-\u9999<>\&]/g, function(i) {
   return '&#'+i.charCodeAt(0)+';';
});
如果在 html 中显示,此编码字符串与字符相同,但不会评估为 javascript

关于javascript - 将 html 显示为文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70407570/

相关文章:

css - 横幅居中后文本不出现

javascript - 在javascript IE中从字符串创建子数组

javascript - 窗口宽度和滚动宽度值

javascript - 使用 jQuery 和 JavaScript 的 For 循环

javascript - 如何更改网页上一个特定字母的颜色(换行文字)?

php - 多个远程上传服务器到服务器

Javascript - 如何从元素的 css 文件中获取所有匹配的类和选择器

php - jQuery 自动完成

javascript - Try 正在执行,但 catch 没有缓存错误

javascript - 对象的多个组件