如何保护我的REST-API?

问题描述 投票:3回答:2

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

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

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

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

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

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

有什么建议吗? 我读到了oauth,但这涉及重定向,我无法想象这将如何适用于移动应用程序,例如在Android上。

node.js security rest express sails.js
2个回答
2
投票

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

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

编辑
我刚刚碰到这篇文章 ,对这个问题有更详细的描述。


2
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.