我创建了一组基于Express.js的REST服务,以查找存储在Mongo数据库中的一些结果。代码为服务的一个非常最小版本可以是这样的:Node.js,Express.js和MongoDB - 使用查找和插入的用户输入安全
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'});
});
}
});
如何验证输入的模式?除了用数千个巨大的输入填充数据库之外,是否可以利用此代码来注入一些代码?如果是的话,如何防止呢?
非常感谢!
谢谢!这正是我正在寻找的那种文章。 – Jason 2014-09-30 11:55:11