安全rest apiNode js



我想揭露一个我找不到解决方案的问题,尽管我在网上被告知了好几次,但我找到的资源并不能满足我的好奇心。

问题如下:

假设我们在以下端点上的nodejs(express(中有一个rest API->/星星。假设我们想将这个带有endpoint/stars的API销售给某个目标客户,因此该endpoint将只允许购买API的客户使用它。问题是自发产生的,让我们假设披萨公司购买了我的API,我为他们生成了一个访问令牌,然后他们会用他们的令牌调用我的端点以获得资源,到目前为止非常好。然而,所有的请求都很容易被看到。

示例Chrome>开发工具>网络,我不仅看到了具有完整地址的端点,还看到了传递的有效负载!

因此,作为一名攻击者,我可以很好地(在不支付API费用的情况下(使用带有令牌的端点/星来捕捉披萨行业,复制所有内容,并通过提供相同的令牌和相同的端点将其打到我的服务上。我已经知道像jwt这样的代币的存在,但它们无论如何都不能解决问题,因为不同的代币只有到期日。即使它在15分钟后或3分钟后过期,只需检索另一个并提供具有相同令牌的相同请求,有人能指导我找到解决方案吗?

我见过的唯一能找到解决方案的是Instagram,它能发送数千行的有效负载,这真的是唯一的方法吗?

注意:它甚至不公开。

@xVoid

  1. 首先,您可以借助node.js中的加密模块为响应数据设置密码/解密模块,在这里您发送加密响应,API客户端解密您的响应并使用它。

  2. 你可以为API设置一个密钥,这意味着每次你的客户或用户向你发送请求时,他们都必须在正文中发送该密钥,而不是在头中发送,这样其他人就不能获取您的数据,因为他们没有该密钥,并且在express中,您可以设置中间件来验证该密钥是否存在,如果不简单地返回";您未被授权";

如果你没有得到任何分数,或者你想深入了解特定的事情,请告诉我

您可以简单地使用仅http cookie并在cookie中发送令牌,而不是普通的头

使用端点的客户不应与最终用户共享其API密钥。

这意味着任何使用您服务的客户都应该至少为您的特定端点创建一个代理服务器。

CLIENT GET /pizza FROM CUSTOMER -> CUSTOMER GET /pizza?apiToken=<...> FROM SERVICE

显然,客户和您的服务之间可能存在中间人攻击,但使用SSL不太可能发生这种情况(相关:查询字符串参数在HTTPS(HTTP+SSL(中是否安全?(

如果客户怀疑他们的api密钥被泄露,他们应该撤销该密钥,并向您的服务部门申请新的密钥。

相关内容

  • 没有找到相关文章

最新更新