现在我已经读过这篇文章Secure node.js restful API 但我需要更多细节。
目标 从客户端(js、angular、ejs)到服务器(node.js)调用 api,但要足够安全,不能篡改发送的 key:values。
情况
我为特定 uri 创建一个 app.post({});
并 return res.json();
。现在问题来了,
Controller 采用一个参数,即 id。现在 id = 1 是 Apple,id = 2 是 Microsoft。
我分别返回 Apple 和 Microsoft,但我不希望访问者(匿名)可以将 id 更改为 2 并获取 Microsoft 的数据。
- 此时访问者是匿名的,对于非匿名用户,我使用 session 。
- 如果我保留 salt 或生成哈希值,那么该算法将通过源代码可见。
- 如果我使用 AUTH,那么凭据将可见。
我希望我对我的问题足够清楚,将等待答案。
示例代码
...
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 是这里的主要内容 你会如何对待它?
最佳答案
您无法控制服务器外部发生的事情。用户可以完全控制他们在请求中输入的内容。
I return Apple and Microsoft Respectively but I dont want that a visitor(anonymous) can just change to id to 2 and get MIcrosoft's Data.
然后,您需要执行身份验证和授权检查,然后才能允许他们访问 Microsoft 的数据。
Visitors are anonymous at this point, for non anon users i use sessions.
如果您有匿名访问者,那么您需要在服务器上检查是否允许将所请求的内容提供给匿名用户。如果不是,您需要以未经授权为由拒绝该请求。
If I keep salt or generate hash then the algorithm will be visible via source code.
这并不重要,因为只有授权用户才应该拥有要放入哈希算法中的密码。无论如何,这应该不相关,您应该使用 HTTPS 来保护客户端和服务器之间的数据,并使用加密哈希来保护存储在用户数据库中的数据。
if I use AUTH then credentials will be visible.
仅适用于您和凭证所属的授权用户(假设您使用 HTTPS,您应该这样做)。
关于javascript - 保护 Node.JS API 的安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35188159/