保护Node.JS API

时间:2016-02-03 21:33:02

标签: javascript angularjs node.js security ejs

现在我已阅读此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的数据。

  1. 此时访客是匿名的,对于非匿名用户,我使用会话。
  2. 如果我保留盐或生成哈希,那么算法将通过源代码可见。
  3. 如果我使用AUTH,则凭证将可见。
  4. 我希望我对自己的问题足够清楚,等待答案。

    示例代码

    ...
    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是主要的东西 你会怎么对待它?

2 个答案:

答案 0 :(得分:1)

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

  

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

然后,您需要先执行身份验证和授权检查,然后才能访问Microsoft的数据。

  

此时访问者是匿名的,对于非匿名用户,我使用会话。

如果您有匿名访问者,则需要在服务器上检查是否允许匿名用户提供所请求的内容。如果不是,则需要拒绝未经授权的请求。

  

如果我保留盐或生成哈希,那么算法将通过源代码可见。

这没关系,因为只有授权用户才能将密码放入哈希算法中。无论如何,这应该不相关,您应该使用HTTPS来保护客户端和服务器之间的数据以及加密哈希,以保护数据以便存储在用户数据库中。

  

如果我使用AUTH,则凭证将可见。

仅限您和凭据所属的授权用户(假设您使用HTTPS,您应该这样做。)

答案 1 :(得分:0)

虽然第1和第2项依赖于您的架构,但我不知道为什么您不将auth数据区分到其他空间而不是使用同一个中的所有空间。

到目前为止,这个解决方案相当简单,在数据库(后端)中使用 UDID 而不是整数ID。

如果您可以分享您拥有的代码示例以及您尝试通过API投放的数据,那么我们就可以详细说明。

感谢。