2011-08-22 93 views
1

我有一个服务器,需要http请求并返回json数据。我的服务器如何知道http请求是来自客户端浏览器而不是来自服务器?特别是如果流量可能从客户端代理到另一台服务器并拨打我的服务器。如何识别http请求是来自浏览器还是来自代理服务器(或服务器)?

我知道我可以检查http标题以了解user-agent,remote-addr..etc但它不安全。人们可以伪造http请求标头。

我能做些什么来识别传入的请求?

+1

你能解释为什么这对你很重要吗?这将有助于回答这个问题。 –

+0

,因为我只希望某些调用(请求)仅在来自客户端浏览器而不是来自服务器(即请求代理到另一个服务器然后调用我的)时有效。 – murvinlai

回答

1

有没有办法让你知道。 “匿名代理”将不具有X-Forwarded-For标题。一些IRC服务器将在扫描客户端连接时寻找常见的代理服务器端口,例如8080,3128等端口。你可以使用像YAPH这样的工具来查找连接到你的人的代理。但它不会拿起phpproxy或代理在奇怪的端口上运行。

这是一场向上的山战,也是黑客使用它们的原因。如果这是一个问题,也许你应该重新评估你的商业模式或你的应用程序的功能。

0

如果您能够检查标题,您将能够看到X-Forwarded-For,它会告诉您“真实”请求的IP。合法的代理使用这个头文件。

对于浏览器,User-Agent头是您感兴趣的内容。热门浏览器和抓取工具将使用此头。

也就是说,这些头可以伪造或省略。没有一种方法可以确定传入请求的“真实”因素。最好包含尽可能多的标题,模式和行为来确定请求的合法性。

+0

那么,人们可以伪造x-forwarded-for? – murvinlai

+0

@murvinlai是它的头部,它可以包含任何元素,如“一些化妆废话:完全假”。 “匿名代理”也不会有x-forwarded-for元素。 – rook

相关问题