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

Node Express全局使用xss-clean时如何跳过特定POST请求保存富文本

解决方案

更推荐选择方案1进行实现,后端可控性更高,安全风险更低

方案1:后端调整xss-clean规则

1.1 跳过指定接口的全局XSS清理

你可以替换原来的全局xss-clean注册逻辑,增加路由判断,指定富文本相关的提交接口不执行XSS清理,其余接口保留防护能力,示例代码如下:

const xss = require('xss-clean');

// 替换原有的 app.use(xss())
app.use((req, res, next) => {
  // 配置不需要执行XSS清理的接口路径,可根据你的业务调整
  const excludePaths = ['/api/article/publish', '/api/comment/save'];
  // 如果需要匹配带动态参数的路由,可把excludePaths项改为正则,用正则test判断
  if (excludePaths.includes(req.path)) {
    return next();
  }
  // 其余接口正常执行XSS清理
  xss()(req, res, next);
});

1.2 仅跳过指定字段的XSS清理

如果你只想放过请求中特定的富文本字段,其余字段还是保留XSS清理,可以采用先暂存字段、清理完成后还原的方式实现,示例代码如下:

app.use((req, res, next) => {
  // 暂存需要跳过的富文本字段,可根据你的业务字段名调整
  let savedRichContent = req.body?.content ? req.body.content : null;
  // 执行全局XSS清理
  xss()(req, res, () => {
    // 清理完成后还原富文本字段
    if (savedRichContent) {
      req.body.content = savedRichContent;
    }
    next();
  });
});

重要提示:以上两种方式跳过XSS清理的富文本内容,必须单独做安全过滤,可使用xss库配置允许的标签和属性,仅放行tiptap等编辑器产出的安全标签(如<p>、<strong>、<ul>等),过滤掉<script>、<iframe>、onclick等风险内容,避免恶意脚本注入。

方案2:前端反转义已转义的内容

如果不想修改后端逻辑,可以在前端拿到被转义的富文本后做反转义处理,再交给富文本渲染组件,示例代码如下:

// 反转义工具函数
function decodeHtml(str) {
  if (!str) return '';
  return str.replace(/&amp;/g, '&')
            .replace(/&lt;/g, '<')
            .replace(/&gt;/g, '>')
            .replace(/&quot;/g, '"')
            .replace(/&#39;/g, "'");
}

// 使用示例:接口请求拿到数据后先反转义
const renderContent = decodeHtml(apiResponse.data.articleContent);

注意:Vue中需要用v-html指令渲染富文本内容,普通插值语法会直接显示HTML标签。渲染前请确认富文本来源可信,否则会存在XSS攻击风险。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:30:03