【问题标题】:Express is applying HTML entities to JSON bodiesExpress 正在将 HTML 实体应用于 JSON 正文
【发布时间】:2021-10-29 19:01:57
【问题描述】:

我们有一个使用 express 和 body-parser 的基于 NodeJS 的应用程序。服务器正在侦听 JSON 格式的 REST 请求。我们遇到了一个问题,请求中的某些字符正在被 HTML/XML 转义,我们强烈怀疑 express 或 body-parse 方面的某些东西正在这样做,但我们无法弄清楚这是什么原因。

在我们的测试场景中,我们使用 curl 发出请求:

curl 'http://localhost:6009/stores/1561289s12' \                                                           ajmas@ghostwalker-echo
  -X 'PUT' \
  -H 'Accept: application/json, text/plain, */*' \
  -H 'Content-Type: application/json; charset=utf-8' \
  --data-raw $'{"name":"O\'Neil"}' \
  --compressed

在服务器上,当我们查看req.body 中的name 值时,结果如下:

O'Neil

导致我们将矛头指向 express 或 body-parser 的原因是,当我们使用 Wireshark 检查时,我们会看到我们发送的正文。

我们初始化JSON解析如下:

  app.use(express.json({}));
  • Express 版本是 4.17.1
  • Node JS 版本:14.15.1

本项目也使用了 express-validator。

任何人都可以提出任何可能导致此问题的建议吗?

【问题讨论】:

  • 用此代码测试,工作正常:pastebin.com/yHWbMVy8
  • 你确定 express 和你的前端之间没有什么东西吗?阿帕奇/ Nginx? iis?
  • 在 localhost 上测试,直接 curl 到 localhost 上的 nodejs 服务器。会检查是否有一些中间件导致问题,因为 Roland 的测试很好。
  • 我很欣赏这不一定是最好的问题,但我不会删除它,因为这是我确信在某个时候会成为搜索的一部分的问题,基于以前的经验。

标签: node.js json express


【解决方案1】:

需要注意的一点是,express-validator 不仅仅是验证,还可以修改或“sanitise”数据。因此,如果在接收和查看req.body 中的值之间有任何修改,那么检查验证器的设置是一个不错的起点。

在这种情况下,该行为可归因于 escape: trueescape(),它们将 HTML 样式实体应用于值。

快速验证器中的清理示例:

export default [
  body('name').trim().escape()
]
export default {
    name: {
        in: ['body'],
        trim: true,
        escape: true
}

删除 'escape' 选项或函数调用将解决此问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 2019-10-03
    • 1970-01-01
    • 2019-09-01
    • 1970-01-01
    • 2011-11-16
    相关资源
    最近更新 更多