现在我已经读过这个Secure node.js restful API,但是我需要更多的细节。
Objective从客户端(js、角形、ejs)调用到服务器(node.js),但安全到不能仅仅篡改发送的键:值。
我为特定的uri和创建了一个app.post({});。现在问题是,
控制器接受一个param say。现在id =1是Apple,id =2是Microsoft。
我分别返回Apple和Microsoft,但我不希望访问者(匿名)只需将id更改为2并获取微软的数据。
我希望我对我的问题足够清楚,将等待答案。
示例代码
...
exports.statement = function(req, res){
dcn_db.pool.getConnection(function(err, connection){
if(!req.body.opid){
return res.sendStatus(400);
}
var opid = req.body.opid;
var con = req.body.con;
connection.query(data_model.mini_statement(req),[opid,con], function(err, rows, fields) {
if(err) {
console.log('Error while performing Query. ' + err); //error respose
return res.json({ error : "true"})
}else{
return res.json({ error : "false", data : rows}); //parse result to json instantly
}
});
connection.release();
});
};
...以上代码采用opid和con.这里最主要的事情是你会怎么对待它?
发布于 2016-02-03 21:46:16
您无法控制服务器之外发生的事情。用户可以完全控制他们在请求中输入的内容。
我分别返回Apple和Microsoft,但我不希望访问者(匿名)只需将id更改为2并获取微软的数据。
然后,在允许他们访问Microsoft的数据之前,您需要执行身份验证和授权检查。
此时访问者是匿名的,对于非anon用户,我使用会话。
如果您有匿名访问者,则需要在服务器上检查是否允许将所请求的内容提供给匿名用户。如果不是,您需要拒绝该请求,因为这是未经授权的。
如果我保留salt或生成哈希,则该算法将通过源代码可见。
这并不重要,因为只有授权用户才能将密码输入到哈希算法中。无论如何,这不应该相关,您应该使用HTTPS来保护客户端和服务器之间的数据,并使用加密散列来保护数据,以便存储在用户数据库中。
如果我使用AUTH,那么凭据将是可见的。
只对您和凭证所属的授权用户(假设您使用HTTPS,您应该这样做)。
发布于 2016-02-03 21:36:02
虽然第一项和第二项取决于你的架构,但我不知道你为什么不把第一项数据和其他一些空间区分开来,而不是在同一个空间中使用所有数据。
到目前为止,这个解决方案看起来相当简单,在数据库中使用UDID而不是整数ID(后端)。
如果您可以通过API共享您所拥有的代码和要提供的数据的示例,这将使我们能够更详细地了解它。
谢谢。
https://stackoverflow.com/questions/35188159
复制相似问题