【问题标题】:Node.js, Express.js and MongoDB - Security about user input with find and insertNode.js、Express.js 和 MongoDB - 使用查找和插入的用户输入的安全性
【发布时间】:2014-11-24 23:53:15
【问题描述】:

我创建了一组基于 Express.js 的 REST 服务来查找存储在 Mongo 数据库中的一些结果。其中一项服务的代码的最小版本可能类似于:

var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var mongoClient = require('mongodb').MongoClient;

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

app.get('/results/:name', function(req, res){
    var name = req.params.name;
    mongoClient.connect('mongodb://localhost/test', function (err, db) {
        var collection = db.collection('results');
        collection.find({ name: name }).toArray( function (err, docs) {
            res.json({results: docs});
        });
    });
});

app.listen(3000);

我来自 Java,过去曾被 SQL 注入打败过。所以我对直接在查找请求中使用用户的输入一点也不满意。由于我对该主题的了解非常有限,我尝试了几个特殊字符(})“';等等)但我无法产生任何奇怪的结果。

这里可能出了什么问题?我应该实施什么样的验证或检查以确保无法注入代码或使程序失败?

现在,让我们做一些愚蠢的事情,让我们相信用户会输入正确的记录:

app.post('/results/', function(req, res){
    var record = req.body;
    if( record.name ) {
        mongoClient.connect('mongodb://localhost/test', function (err, db) {
            var collection = db.collection('results');
            collection.insert( record, function(err, doc){});
            res.json({message: 'ok'});
        });
    }
});

如何验证输入的架构?除了用数千个巨大的输入填充数据库之外,是否有可能利用此代码注入一些代码?如果是,如何预防?

非常感谢!

【问题讨论】:

    标签: node.js mongodb security express sql-injection


    【解决方案1】:

    我会将此作为评论,但由于我还不允许这样做,所以我将其作为回应。

    由于我不是这里的专家,所以我详细介绍了here is an article,我发现使用 mongo 和 node.js 时的漏洞真的很有趣。

    为了验证模型,我使用 mongoose 作为我的 mongoDB 的客户端,它有很大帮助,因为它有自己的验证器,您也可以自己制作。

    我希望它可以帮助您进行搜索。

    【讨论】:

    • 谢谢!这正是我要搜索的文章。
    【解决方案2】:

    Mongodb 访问是基于 api 的,与基于语言的 SQL 相反。 SQL 是一种语言,如果您让用户的输入插入到该语言中,那么很容易进行代码注入并对数据库进行几乎所有操作。

    MongoDB有不同的做法,当你在做搜索的时候,你调用一个API函数来做搜索,而这个API函数只能做搜索。

    如果您让用户选择字段和值,那么他可以进行您意想不到的搜索,但仅此而已。

    同样适用于插入、更新和删除,注意不要让用户选择字段和值,因为他可以选择你不期望也不想要的。

    【讨论】:

      猜你喜欢
      • 2022-10-06
      • 1970-01-01
      • 1970-01-01
      • 2012-02-07
      • 1970-01-01
      • 2012-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多