目前,如果用户阅读我的网络应用程序的来源,他们就能够确定我的网络应用程序使用的所有RESTful服务的直接URI。
我看到的问题是:我的Web应用程序知道如何正确使用API,我可能没想过人工已知的每一个验证都可以防止通过API发送错误数据。
因此,有一种方法可以防止"直接"访问API并将其仅限于我的Web应用程序?
P.S。作为FYI:关于用户的API调用受到用户特定cookie的保护,该cookie仅在登录时发出。这意味着我不太害怕用户X能够通过API直接修改用户Y的数据。
答案 0 :(得分:3)
没有
如果浏览器发出请求,则用户可以欺骗请求。周期。
我的网络应用程序知道如何正确使用API
这很好,但这会让你走上假设客户端功能按预期执行的道路。 从不做出这样的假设。
我可能没想过人类已知的每一个验证都可以防止通过API发送错误数据
这句话让我相信API本身比它需要的更复杂。你能做的最好的事情是简化。在没有看到特定代码的情况下更难以更具体,但API请求应该相当简单和直接,并且应该普遍应用防止恶意代码通过的相同技术。这里适用的通用规则与任何Web应用程序交互相同......
正如您在最后提到的那样,您已经处理了请求的身份验证和授权。鉴于此,如果用户X 允许进行给定的API调用,那么您基本上要问的是,“如何允许用户X在不允许用户X制作API的情况下进行API调用API调用?“服务器无法区分。请求是请求。
当然,您可以尝试,例如始终在代码生成的请求中包含一些自定义标头。但任何人都可以检查该请求并欺骗该标头。用户的浏览器不属于您的应用程序,不受您的控制。