如何防止签名令牌用户通过浏览器开发工具访问 API 响应?

Posted

技术标签:

【中文标题】如何防止签名令牌用户通过浏览器开发工具访问 API 响应?【英文标题】:how to prevent signed token users from accessing the API response through brower developer tools? 【发布时间】:2019-01-05 17:21:48 【问题描述】:

Web 应用程序已经实现了 JWT 和 HTTPS,问题是从服务器(Node js)发送到签名令牌用户的 json 响应在客户端(react js)浏览器开发工具中可见。有什么方法可以使用加密模块来防止敏感的 json API 响应被浏览器开发工具简单地查看? 注意:我尝试过混淆技术,但不相信。

【问题讨论】:

我认为答案必须是“否”,因为您在浏览器上执行的代码必须能够读取该响应。由于浏览器工具正在有效地调试该代码,因此代码可以看到什么,该工具可以看到... 理论上是的,您仍然可以正确加密令牌(或其属性)。那么问题出在哪里? (在开发工具中,您可以在客户端看到所有内容,但如果您使其不可读,则无需隐藏它) 【参考方案1】:

如果您的应用程序的安全性依赖于客户端以特定方式的行为(例如,不直接向用户显示 API 响应),那么根据定义,您的应用程序是不安全的。

无论谁与它通信(由您编写的软件与第三方软件),您的 API 都应该是安全的。

您需要问这个事实表明您的应用程序的基本部分设计不佳。

问问自己为什么需要对用户隐藏这些信息,然后解决那个问题。

【讨论】:

这不是我的应用程序的安全性,而是 api 响应,它是可以通过浏览器工具一次性复制的专有数据集; Web 应用程序的设计旨在防止从网页复制此专有数据集。但这里的问题是,登录用户可以简单地复制粘贴 json 响应,这应该完全被阻止,请对此提出任何建议。 @mdpura 如果您有不希望用户看到的信息,请不要将其发送给他们。就是这么简单。从逻辑上考虑这一点 - 如果您实施了一个禁止使用浏览器工具(您不能)的解决方案,那么什么会阻止我手动向浏览器外部的数据集发出 HTTP 请求?你解决这个问题的方法不对。 什么会阻止我手动向浏览器外部的数据集发出 HTTP 请求 回答:如问题所述,这仅适用于签名令牌用户,有一个 API 密钥设置来处理这个问题也是。我只想知道,有没有办法加密响应,这就是挑战。从摘录中您的答案似乎是“..禁止使用浏览器工具(您不能)..”。感谢您的宝贵时间 您可以在客户端使用加密,但是任何对如何读取纯 JSON 有足够知识的人都可以通过使用您在客户端上使用的任何方法来解密您的加密消息手动执行或使用断点检查。您的 JSON API 响应确实应该与安全性无关,并且您的 JWT 与您的 JSON API 完全分开,并且完全用于不同的目的。 @mdpura 您使用令牌来验证您的用户这一事实并没有阻止我为您的 API 编写自定义客户端。我可以执行与浏览器相同的请求并检索相同的响应。加密响应也没有任何作用——解密的逻辑必须在客户端执行,所以我也可以复制它。您对这个问题的总体理解似乎存在缺陷。在继续之前更正此问题可能是个好主意。

以上是关于如何防止签名令牌用户通过浏览器开发工具访问 API 响应?的主要内容,如果未能解决你的问题,请参考以下文章

在 RESTful Web API 中验证后续请求的令牌签名

如何防止经过身份验证的用户欺骗 RESTful API 调用

API 身份验证流程

如何获取访问令牌? (Reddit API)

微服务授权。如何防止具有有效 JWT 的用户访问其他用户的资源?

Web API 中基于令牌的身份验证,无需任何用户界面