防止从浏览器直接访问api

时间:2013-12-04 17:21:11

标签: rest

目前,如果用户阅读我的网络应用程序的来源,他们就能够确定我的网络应用程序使用的所有RESTful服务的直接URI。

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

因此,有一种方法可以防止"直接"访问API并将其仅限于我的Web应用程序?

P.S。作为FYI:关于用户的API调用受到用户特定cookie的保护,该cookie仅在登录时发出。这意味着我不太害怕用户X能够通过API直接修改用户Y的数据。

1 个答案:

答案 0 :(得分:3)

没有

如果浏览器发出请求,则用户可以欺骗请求。周期。

  

我的网络应用程序知道如何正确使用API​​

这很好,但这会让你走上假设客户端功能按预期执行的道路。 从不做出这样的假设。

  

我可能没想过人类已知的每一个验证都可以防止通过API发送错误数据

这句话让我相信API本身比它需要的更复杂。你能做的最好的事情是简化。在没有看到特定代码的情况下更难以更具体,但API请求应该相当简单和直接,并且应该普遍应用防止恶意代码通过的相同技术。这里适用的通用规则与任何Web应用程序交互相同......

  1. 永远不要相信来自客户的任何内容
  2. 永远不要假设客户端代码按预期执行
  3. 永远不要将输入作为代码执行,始终将其视为原始值
  4. 等......
  5. 正如您在最后提到的那样,您已经处理了请求的身份验证和授权。鉴于此,如果用户X 允许进行给定的API调用,那么您基本上要问的是,“如何允许用户X在不允许用户X制作API的情况下进行API调用API调用?“服务器无法区分。请求是请求。

    当然,您可以尝试,例如始终在代码生成的请求中包含一些自定义标头。但任何人都可以检查该请求并欺骗该标头。用户的浏览器不属于您的应用程序,不受您的控制。