如何区分我的客户端应用程序发送的HTTP请求和来自Internet的其他请求

时间:2015-09-01 11:37:23

标签: security http network-protocols

假设我有一个通过HTTP工作的客户端/服务器应用程序。服务器提供RESTy API,客户端使用常规HTTP GET请求通过HTTP调用服务器。

服务器需要身份验证。 Internet上的任何人都可以向我的服务器发送GET HTTP请求。没关系。我只是想知道如何在客户端的请求和来自Internet的其他请求之间区分

假设我的客户端发送了请求X.用户记录了此请求(包括代理,标题,cookie等),并再次使用wget发送请求。我想在服务器端区分这两个请求。

2 个答案:

答案 0 :(得分:2)

没有确切的解决方案而不是身份验证。另一方面,您不需要实现用户名和&此基本要求的密码验证。您可以简单地为您的"客户端"识别随机字符串。并通过自定义http标头变量发送到api,如;

GET /api/ HTTP/1.1
Host: www.backend.com
My-Custom-Token-Dude: a717sfa618e89a7a7d17dgasad
...

您可以通过此自定义标头变量区分请求,并确定其值的存在性和有效性。但是我通过默默无闻来说"安全"不是解决方案。

答案 1 :(得分:1)

您无法确定是否是您的申请。请求中的任何内容都可以弥补。

但是,您可以确保没有人无意中使用您的应用程序。例如,某人可能会创建一个javascript应用程序并指向您的REST API。浏览器发送Origin标头(draft),指示生成请求的应用程序。您可以使用此标头来过滤来自非您的应用程序的调用。

然而,有人可能会使用他自己的Web服务器作为您的应用程序的代理,然后允许他更详细地制作HTTP请求。在这种情况下,您可以在某个时刻确定其IP地址并阻止它。

但最好的解决方案是提供一定程度的授权。例如,UI部分可以通过登录/密码请求身份验证,或者仅通过验证码来确保呼叫者是一个人,然后生成令牌并将该令牌与使用会话相关联。从那时起,对API的调用必须提供这样的标记,否则你必须拒绝它们。