现在我已阅读此Secure node.js restful API 但是我需要更多细节。
目标 要从客户端(js,angular,ejs)调用api到服务器(node.js),但要足够安全,不能只是篡改密钥:发送的值。
场合
我为特定的uri和app.post({});
创建了return res.json();
。现在问题就在这里,
Controller需要一个param说id。现在id = 1是Apple,id = 2是Microsoft。
我分别返回Apple和Microsoft,但我不希望访问者(匿名)可以将id更改为2并获取MIcrosoft的数据。
我希望我对自己的问题足够清楚,等待答案。
示例代码
...
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 .... opid是主要的东西 你会怎么对待它?
答案 0 :(得分:1)
您无法控制服务器外部的操作。用户可以完全控制他们在请求中输入的内容。
我分别返回Apple和Microsoft,但我不希望访问者(匿名)只能将id更改为2并获取MIcrosoft的数据。
然后,您需要先执行身份验证和授权检查,然后才能访问Microsoft的数据。
此时访问者是匿名的,对于非匿名用户,我使用会话。
如果您有匿名访问者,则需要在服务器上检查是否允许匿名用户提供所请求的内容。如果不是,则需要拒绝未经授权的请求。
如果我保留盐或生成哈希,那么算法将通过源代码可见。
这没关系,因为只有授权用户才能将密码放入哈希算法中。无论如何,这应该不相关,您应该使用HTTPS来保护客户端和服务器之间的数据以及加密哈希,以保护数据以便存储在用户数据库中。
如果我使用AUTH,则凭证将可见。
仅限您和凭据所属的授权用户(假设您使用HTTPS,您应该这样做。)
答案 1 :(得分:0)
虽然第1和第2项依赖于您的架构,但我不知道为什么您不将auth数据区分到其他空间而不是使用同一个中的所有空间。
到目前为止,这个解决方案相当简单,在数据库(后端)中使用 UDID 而不是整数ID。
如果您可以分享您拥有的代码示例以及您尝试通过API投放的数据,那么我们就可以详细说明。
感谢。