You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript代码跨站脚本(XSS)漏洞检测及修复方案咨询

跨站脚本(XSS)漏洞修复方案

问题说明

你的Node.js代码存在XSS漏洞:不可信数据源req.body中的userName未经过滤,直接拼接后通过res.send返回给客户端,攻击者可构造恶意userName内容控制响应输出,触发XSS攻击;同时日志写入操作中也存在同样的未处理风险。


具体修复方案

1. 对不可信数据做HTML转义

将userName中的HTML特殊字符(如<、>、"、'、&)转义为HTML实体,确保浏览器将恶意内容解析为普通文本。

方式一:手动实现转义函数

function escapeHtml(str) {
  return str.replace(/[&<>"']/g, char => {
    const entities = {
      '&': '&amp;',
      '<': '&lt;',
      '>': '&gt;',
      '"': '&quot;',
      "'": '&#39;'
    };
    return entities[char] || char;
  });
}

// 修复后的响应代码
return res.status(helper.statusCode.OK).send({
  message: `${escapeHtml(userName)} ${helper.statusMessage.NO_SCHEDULE_DATA}`
});

方式二:使用成熟第三方库

先安装依赖:

npm install escape-html

再在代码中引入使用:

const escapeHtml = require('escape-html');

// 修复后的响应代码
return res.status(helper.statusCode.OK).send({
  message: `${escapeHtml(userName)} ${helper.statusMessage.NO_SCHEDULE_DATA}`
});

2. 输入内容白名单验证

从源头限制userName的合法字符,只允许字母、数字、下划线等安全字符,拒绝非法输入:

// 定义合法用户名的正则规则
const validUserName = /^[a-zA-Z0-9_]+$/;
if (!validUserName.test(userName)) {
  return res.status(helper.statusCode.BAD_REQUEST).send({
    message: '用户名格式非法'
  });
}

// 验证通过后再返回响应
return res.status(helper.statusCode.OK).send({
  message: `${userName} ${helper.statusMessage.NO_SCHEDULE_DATA}`
});

3. 修复日志写入的安全问题

日志中的userName和initialDate同样需要转义,避免日志注入风险:

util.errorLoging({
  message: `${escapeHtml(userName)} ${helper.statusMessage.NO_SCHEDULE.DATA} ${escapeHtml(initialDate)}`,
  bqJobId: bqJobId,
  userName: escapeHtml(userName)
});

内容的提问来源于stack exchange,提问作者Jaango Jayaraj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 22:06:23