保护 REST API 的简单身份验证方法

信息安全 验证 javascript 休息 api 节点.js
2021-09-10 07:27:34

我一直在拼命寻找一种简单的方法来保护我的 API,但仍然没有找到一种有效的方法。与许多 RESTful API 不同,我的 API 不需要用户登录、过期令牌或其他复杂(尽管非常安全)的身份验证方法,这使得大多数教程无法使用。

我唯一的要求是在一条路由上将记录记录到我的数据库的 POST 请求应该受到保护,而访问同一路由上的记录的 GET 请求应该不受保护。记录记录的客户端是受信任的,我会私下提供他们的凭据。

我在这里尝试过使用这种基本的身份验证方法:

var basicAuth = require('basic-auth');

var auth = function (req, res, next) {
  function unauthorized(res) {
    res.set('WWW-Authenticate', 'Basic realm=Authorization Required');
    return res.send(401);
  };

  var user = basicAuth(req);

  if (!user || !user.name || !user.pass) {
    return unauthorized(res);
  };

  if (user.name === 'foo' && user.pass === 'bar') {
    return next();
  } else {
    return unauthorized(res);
  };
};

但是当我使用错误的用户名和密码时,POST 请求仍然有效。

我真的不知道该寻找什么了,因为我认为这样的基本身份验证会起作用。

编辑:在我忽略了 app.post 之后更改了几件事后,设法让它工作。

1个回答

如果您没有记录查询数据库中数据的 RESTful GET 并且该数据打算公开,那么您可以公开 HTTP GET 并使用 Web 服务器中内置的安全性来防止在该操作期间发生伤害。

对于 RESTful POST,使用 SSL 的同时代的 TLS,但不要自己实现它。您可以轻松地在任何现代 Web 服务器上设置 HTTPS POST。CA 通常支持安装服务器端证书的帮助台支持。因为世界各地的人们每天都在实施 HTTPS POST,所以对这种操作的支持使得设置和维护比做一些简单但实际上安全的事情更容易。

您编码的内容不安全,您可能认为这并不重要。

为了在回答您的问题时尽职尽责,请注意,如果不使用 HTTPS 等安全协议,通过电话或在纸上向人们提供凭据是不安全的。依靠在服务器上测试凭证的价值会留下一个巨大的安全漏洞,可能会导致您可能忽略的后果。

攻击者可以轻松识别路线上的密码,然后对您的客户/客户/访客的帐户和数据造成严重破坏。即使数据不是业务关键,未受保护的写入也可能以糟糕的方式结束。有人可能出于任何原因将儿童色情或某些军事机密放入您打算向公众开放的数据库中。您将无法证明您或受信任的用户之一没有把它放在那里。