【问题标题】:How to Secure Restful Route in Backbone and Express?如何在 Backbone 和 Express 中保护 Restful 路由?
【发布时间】:2013-04-23 10:18:27
【问题描述】:

如何在我的应用程序中保护我的快速“GET”路由,以便电子邮件和用户数据不会暴露给未经授权的客户。 我想知道,我是否应该像使用密码一样对所有字段进行哈希处理?

我的 GET "/users" 路由像这样发送 JSON..

 {
 "name": "keven",
 "email": "keveng@gmail.com",
 "user": "keven",
 "password": "EEOnGFritH1631671dc8da7431399f824b3925a49e",
 "country": "America",
 "date": "April 20th 2013, 10:34:22 pm",
 "_id": "5173502e5g52676c1b000001"
  }

在我的骨干网和节点/快递应用程序中,我的骨干网集合中有一个 url,如下所示..

Users = Backbone.Collection.extend({
model: User,
url: '/users',
});

而快递路线是这样的:

app.get('/users', function(req, res){
User.find({}, function (err, accounts) {
res.send(accounts);
});
});

谢谢。

【问题讨论】:

  • 定义未经授权的客户端,未登录?错误的用户?组错了吗?
  • 例如。如果访问者访问该站点,查看源代码和backbone.js 文件(无论是否登录)。他们将能够获得用于集合的 json 路由。用户可以(如上面的示例)访问 site.com/users 并以 JSON 格式获取完整的用户列表等。我想对数据进行散列/加盐可能会延迟黑客攻击,但我不确定仅依靠它是否是一种好的/安全的做法。

标签: node.js rest backbone.js express


【解决方案1】:

虽然这并不理想,但如果用户和密码随每个请求一起发送,您只需要一些中间件来在您的 node.js 应用程序中执行身份验证和授权。

认证功能:

function authenticate(user, password, fn) {
  // Trivial, but not recommended
  User.findOne({user: user, password: password}, function (err, user) {
    if (err) {
      return fn(err);
    }
    if (!user) {
      return fn(new Error('no such user'));
    }

    return fn(null, user);
  });
}

一个授权中间件功能,它依赖于身份验证:

function authorize(req, res, next) {
  authenticate(req.params.user, req.params.password, function(err, user) {
    if (err) {
      res.redirect('/login');
    }

    // Probably other logic her to determine now *what* they can do

    return next(null, user);
  });
}

现在,由于您使用的是 Express,您可以在路由中使用授权中间件来限制访问:

app.get('/users', authorize, function(req, res){
  // Can only get here if allowed
  User.find({}, function (err, accounts) {
    res.send(accounts);
  });
});

但请注意,这将针对每个请求执行用户搜索——这是我说它不理想的原因之一。 对于正确的系统安全设计,您应该考虑使用 http 基本身份验证和基于会话的 cookie 或 oauth。

这里有一些链接供您查看:

【讨论】:

  • 感谢伟大的链接并帮助我理解。我最终使用 Passportjs (passportjs.org) 进行身份验证,并将添加它以保持站点管理员可以访问路由。
猜你喜欢
  • 2017-09-19
  • 2020-04-26
  • 2014-03-20
  • 1970-01-01
  • 2021-10-19
  • 1970-01-01
  • 1970-01-01
  • 2018-02-09
  • 2014-05-17
相关资源
最近更新 更多