当前位置: 首页 > news >正文

在JavaScript / HTML中,转移字符导致js生成的html出错

举个例子:

// 当song中存在英文单引号时,会导致无法正确处理:
p.innerHTML = `<li onclick="clicksong('${song}')">${song}</li>`;

这是一个典型的XSS漏洞和安全问题。当song变量包含单引号时,会破坏JavaScript字符串,导致语法错误或安全漏洞。以下是几种改进方案:

方案1:使用数据属性(推荐)

p.innerHTML = `<li data-song="${escapeHTML(song)}">${escapeHTML(song)}</li>`;
p.querySelector('li').addEventListener('click', function() {clicksong(this.dataset.song);
});

方案2:使用事件委托

p.innerHTML = `<li>${escapeHTML(song)}</li>`;
p.querySelector('li').addEventListener('click', () => {clicksong(song);
});

方案3:如果必须保持内联事件,使用JSON序列化

p.innerHTML = `<li onclick="clicksong(${JSON.stringify(song)})">${escapeHTML(song)}</li>`;

完整的HTML转义函数

function escapeHTML(str) {const div = document.createElement('div');div.textContent = str;return div.innerHTML;
}// 或者使用更全面的转义
function escapeHTML(str) {return str.replace(/[&<>"']/g, function(match) {const escape = {'&': '&amp;','<': '&lt;','>': '&gt;','"': '&quot;',"'": '&#39;'};return escape[match];});
}

方案4:使用模板引擎或框架

// 使用现代JavaScript创建元素
const li = document.createElement('li');
li.textContent = song;
li.addEventListener('click', () => clicksong(song));
p.appendChild(li);

最佳实践示例

// 安全的歌曲列表渲染函数
function renderSongList(songs, container) {const fragment = document.createDocumentFragment();songs.forEach(song => {const li = document.createElement('li');li.textContent = song;li.addEventListener('click', () => clicksong(song));fragment.appendChild(li);});container.innerHTML = ''; // 清空容器container.appendChild(fragment);
}

关键改进点

  1. 分离HTML和JavaScript:避免在HTML中嵌入JavaScript代码
  2. 正确转义:对动态内容进行适当的HTML转义
  3. 使用事件监听器:代替内联的onclick属性
  4. 数据属性:安全地存储需要的数据

推荐使用方案1或方案4,它们完全避免了字符串拼接带来的安全问题,代码也更易维护。

http://www.dtcms.com/a/442610.html

相关文章:

  • 手机网站格式商城jsp可以做网站首页吗
  • Docker 完整教程 | 从基础到实战(3,4)
  • 报告网站开发环境网站想做个链接怎么做
  • wordpress 站内搜索慢开源低代码
  • Sass 与 Bootstrap 5的区别是什么?
  • 福州+网站建设+医疗wordpress干嘛用的
  • o2o网站平台怎么做wordpress 3.8.1 漏洞
  • Linux根目录结构清单:一文掌握“伪目录”与19个关键文件夹
  • 总结网站推广策划书的共同特点广告网站模板下载 迅雷下载不了
  • 网站域名骗子做静态网站选用什么服务器
  • 老题新解|正常血压
  • WebRTC 入门与实战(一)之初级篇
  • 福州网站建设好的公司网站加入地图导航
  • directadmin备份网站wordpress用户名的要求
  • 网站设计文字大小wordpress类似于
  • 邹晓辉Z与其AI智能体A示范人机互助概要科普介绍:融智学三部曲
  • 中国高铁车型简记
  • Spring IOC , DI 和 应用分层
  • 现代化文件下载器
  • AI大模型微调教程6
  • Python函数返回多个值完全指南:从基础到高级实战
  • 好的手表网站wordpress 微信 主题制作
  • 「机器学习笔记2」机器学习系统设计:从理论到实践
  • 北京网站建设公司华网制作移动端网站价格
  • RSS 阅读器:信息时代的便捷助手
  • memcpy 简单实现
  • com2com一个将远端串口数据转发到本地的工具
  • 【人工智能通识专栏】第三十五讲:工作流(Workflow)
  • 怎么制作网站教程视频网站建设情况
  • 裕顺网站建设贵州住房城乡建设厅网站