防止从浏览器直接访问 api

Tha*_*Don 2 rest

目前,如果用户阅读我的 Web 应用程序的源代码,他们将能够确定我的 Web 应用程序使用的所有 RESTful 服务的直接 URI。

我看到的问题是:我的 Web 应用程序知道如何正确使用 API,而且我可能没有想到人类已知的每一个验证来防止通过 API 发送错误数据。

那么,有没有一种方法可以防止“直接”访问 API 并将其仅限于我的 Web 应用程序?

PS 仅供参考:有关用户的 API 调用受到用户特定 cookie 的保护,该 cookie 仅在登录时发布。这意味着我不太害怕用户 X 能够通过 API 直接修改用户 Y 的数据。

Dav*_*vid 5

不。

如果浏览器正在发出请求,则用户可以欺骗该请求。时期。

我的 Web 应用程序知道如何正确使用 API

这很好,但这会让您走上假设按预期执行客户端功能的道路。 永远不要做这种假设。

我可能没有想到人类已知的每一个验证来防止通过 API 发送不良数据

这句话让我相信 API 本身比它需要的更复杂。你能做的最好的事情就是简化。不看具体代码很难说得更具体,但 API 请求应该相当简单和直接,并且应该普遍应用防止恶意代码通过的相同技术。此处适用与任何 Web 应用程序交互相同的一般规则......

  1. 永远不要相信来自客户的任何东西
  2. 永远不要假设客户端代码按预期执行
  3. 永远不要将输入作为代码执行,始终将其视为原始值
  4. 等等...

正如您在最后提到的,您已经处理了请求的身份验证和授权。鉴于此,如果允许用户 X进行给定的 API 调用,那么您实际上要问的是,“我如何允许用户 X 进行 API 调用而不允许用户 X 进行 API 调用?” 服务器无法区分。一个请求就是一个请求。

当然,有些事情您可以尝试,例如始终在代码发出的请求中包含一些自定义标头。但是任何人都可以检查该请求并欺骗该标头。用户的浏览器不是您的应用程序的一部分,也不在您的控制之下。