我有一个服务器接受http请求并返回json数据。我的服务器如何知道http请求是来自客户端浏览器而不是来自服务器?特别是如果流量可以从客户端代理到另一个服务器并调用我的服务器。
我知道我可以检查http标头以了解用户代理,remote-addr..etc但它不安全。人们可以伪造http请求标头。
我可以采取哪些其他技巧来识别传入的请求?
答案 0 :(得分:1)
你无法知道。 “匿名代理”将不具有X-Forwarded-For
标头。一些IRC服务器将在连接时端口扫描客户端,寻找常见的代理服务器端口,如8080,3128等。你可以破解像YAPH这样的工具来寻找与你联系的人的代理。但它不会选择phpproxy或在奇怪端口上运行的代理。
这是一场上山战,也是黑客使用它们的原因。如果这是一个问题,也许您应该重新评估您的业务模型或您的应用程序如何运作。
答案 1 :(得分:0)
如果您能够检查标题,您将能够看到X-Forwarded-For,它将告诉您“真实”请求的IP。合法代理使用此标头。
对于浏览器,用户代理标题是您感兴趣的内容。热门浏览器和抓取工具将使用此标题。
也就是说,这些标题可以伪造或省略。没有一种方法可以确定传入请求的“真实”因素。最好合并尽可能多的标题,模式和行为,以确定请求的合法性。