你能告诉我 express-mongo-sanitize 是不是有效吗?
Posted
技术标签:
【中文标题】你能告诉我 express-mongo-sanitize 是不是有效吗?【英文标题】:Can you tell me if express-mongo-sanitize is working?你能告诉我 express-mongo-sanitize 是否有效吗? 【发布时间】:2021-10-22 22:40:48 【问题描述】:我正在尝试为我不起眼的 MERN 网络应用程序设置一些安全中间件,我目前正在使用头盔和 express-mongo-sanitize,专门用于防止 NoSQL 注入攻击。
不过,我已经在 server.js 文件中进行了如下设置:
const express = require('express')
const helmet = require('helmet')
const mongoSanitize = require('express-mongo-sanitize')
...
app.use(mongoSanitize())
app.use(helmet())
// Routes below
...
我尝试通过模拟注册来测试它:
用户名:“$gt”:“” 密码:'TestPassword'
所以 req.body 将是:
username: '"$gt": ""',
password: 'TestPassword'
但是 express-mongo-sanitize 似乎没有捕捉到它,它会进入我的数据库。我是不是误会了什么?用户名键的值是一个字符串,所以也许它已经可以了?请原谅我的无知,我正在学习。
【问题讨论】:
【参考方案1】:据我了解,从调试和通过代码来看,它清理的键是键 = 值对的查询和具有 $ 或点的 post 参数中的任何潜在键。它还尝试清理请求正文和标头中的任何键。
比如上面的前一个用户提供的json也不行。
但 https://your-domain/?$user=json 会被清理为 user=json。
它不会像您和我所期望的那样从参数的值中删除 $。我还在 github 上向创作者提出了一个问题,看看他说了什么。我认为安全风险是关键和价值。如果您不将密钥保存到 mongodb 而是保存值,这将没有任何好处。
作为参考,它会检查以下 HTTP 部分以删除任何潜在的有害 $ 或 .
['body', 'params', 'headers', 'query'].forEach(function (key) ...
【讨论】:
【参考方案2】:express-mongo-sanitize 的作用是清理以美元符号开头的键。
username: '"$gt": ""' --> this isn't a key starting with a dollar sign. Rather, the value of username is just a string.
尝试将这个对象发送给它:
"username": "$gt": ""
【讨论】:
以上是关于你能告诉我 express-mongo-sanitize 是不是有效吗?的主要内容,如果未能解决你的问题,请参考以下文章
仅在 Facebook 分享中出现问题....你能告诉我哪里出错了吗?
你能告诉我这个 Cohen-Sutherland 算法的实现有啥问题吗?
你能告诉我而不是python中的反斜杠“\”,还有其他可能性吗? [复制]