保护 Node.JS 个 API

Securing Node.JS APIs

现在我已经读完这篇Secure node.js restful API 但我需要更多细节。

Objective 从客户端 (js,angular,ejs) 调用 api 到服务器 (node.js) 但足够安全以至于不能篡改发送的 key:values。

情况 我为特定的 uri 和 return res.json(); 创建了一个 app.post({});。现在问题来了,

Controller 接受一个参数 id。现在 id = 1 是苹果,id = 2 是微软。

我 return Apple 和 Microsoft 分别,但我不希望访问者(匿名)可以将 id 更改为 2 并获取 MIcrosoft 的数据。

  1. 此时访问者是匿名的,对于非匿名用户,我使用会话。
  2. 如果我保留 salt 或生成哈希,则算法将通过源代码可见。
  3. 如果我使用 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 是这里的主要内容 你会如何对待它?

虽然第 1 项和第 2 项取决于您的体系结构,但我不知道您为什么不将身份验证数据与其他一些 space 区分开来,而不是在同一个数据中使用所有数据。

到目前为止,这个问题的解决方案看起来相当简单,在您的数据库(后端)中使用 UDIDs 而不是整数 ID。

如果您可以分享您拥有的代码示例和您尝试通过 API 提供的数据,那将使我们能够对其进行详细说明。

谢谢。

您无法控制服务器外部发生的事情。用户可以完全控制他们在请求中输入的内容。

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,您应该这样做)。