如何保护我的REST-API?

时间:2013-10-05 18:21:47

标签: node.js security rest express sails.js

我有一个api构建 node.js& express.js 即可。现在我有一个不安全的api,任何人都可以获取,发布,删除,删除记录。

我正面临以下问题。我的其他api不应该验证用户而是应用程序。例如。我的移动应用程序应该有一个有效的令牌来访问api。对于Web应用程序也是如此。

另一个用户案例:我的api将被另一个只使用一次休息呼叫的应用程序使用。所以代码中的某个地方我不知道在一个应用程序中我不知道(大多数情况下)我的api上的休息调用将被触发。如何保护此类访问权限,因为不涉及cookie或会话?

我的第一个想法是,创建一个用户和一个密码。每个api调用(通过https)必须包含凭据。密码可能会被散列。不过我读了这个

  

不应出现用户名和密码,会话令牌和API密钥   在URL中,因为这可以在Web服务器日志中捕获并生成它们   具有内在价值。

来自https://www.owasp.org/index.php/REST_Security_Cheat_Sheet

对此有何建议?我读过关于oauth但是这涉及重定向,我无法想象这对于移动应用程序如何工作,例如在android上。

2 个答案:

答案 0 :(得分:2)

您可以使用RSA加密,查看节点的ursa模块 使用它的简化过程是......安排客户端应用程序使用公钥加密密码,并在服务器端使用私钥密码解密,检查密码是否符合您的预期并采取相应措施...... < / p>

有很多关于在应用程序中使用rsa的文章,我相信如果你只是谷歌,你将能够找到更明确的解释如何使用它。

修改
我刚刚碰到this post,对此问题有更详细的说明。

答案 1 :(得分:2)

有一个问题是应用程序如何首先知道用户名/密码,但是如果你对一般的想法没问题(这是安全的,只要你考虑应用程序运行的环境是安全),那么您不必担心URL中的用户名/密码:只需使用https而不是https。

https已加密,因此只有2个端点(客户端和您的API)甚至可以读取URL。中间的任何路由器/代理/服务器只能看到加密数据,无法访问您的用户名/密码。

而不是用户名/密码,顺便说一句,只需使用“访问令牌”,这是一个很长的(读取:难以猜测)字符串,并为每个应用程序分配一个访问令牌。最后,您将有效令牌列表保留在数据库中,并对其进行身份验证。如果您愿意,甚至可以将过期日期附加到这些字符串。

将访问令牌添加为https:// url的一部分是常见做法。