如何判断请求是来自浏览器还是服务器?

Posted

技术标签:

【中文标题】如何判断请求是来自浏览器还是服务器?【英文标题】:How to tell if a request comes from browser or server? 【发布时间】:2013-12-11 21:26:14 【问题描述】:

是否有可靠的方法来判断对您网站的请求是来自服务器到服务器调用还是来自浏览器 url 调用?

例如,Paypal IPN 是服务器到服务器的调用。但是您也可以通过直接从带有浏览器参数的 url 调用它来伪造它。

我尝试了两种方式并在这两种情况下都转储了 $_SERVER,并且为浏览器设置了一些变量,但没有为服务器到服务器调用设置......即

HTTP_COOKIE
HTTP_CACHE_CONTROL

它们在服务器到服务器调用中不存在。我可以可靠地假设情况总是如此吗?

我可以使用 HTTP_USER_AGENT,但它可以是任何东西,我不想检查 REMOTE_ADDR,因为我试图让这更像是一种动态更改,不限于贝宝或任何特定的服务器端回复。我的假设是服务器端调用会缺少“通用浏览器”值。它可能不是 100% 可靠,但可能是 99%

这将最终确定我是在回调页面上使用 php 标头重定向还是 javascript 重定向。

想法?

【问题讨论】:

【参考方案1】:

是否有可靠的方法来判断对您网站的请求是来自服务器到服务器调用还是来自浏览器 url 调用?

不,没有 100% 可靠的方法。如果用户能够掌握正确的参数,他/她可以使用 Web 浏览器或简单的自定义应用程序轻松伪造“服务器到服务器”请求。

唯一真正的(硬核)防御伪造是结合使用 HTTPS 和客户端证书或作为请求的一部分发送的某种安全令牌。

【讨论】:

以上是关于如何判断请求是来自浏览器还是服务器?的主要内容,如果未能解决你的问题,请参考以下文章

nginx里面如何判断一个请求是来自局域网还是外网

浏览器如何决定一个请求是用HTTP1还是HTTP2?

浏览器如何决定一个请求是用HTTP1还是HTTP2?

浏览器如何决定一个请求是用HTTP1还是HTTP2?

浏览器如何决定一个请求是用HTTP1还是HTTP2?

python 判断请求是pc端还是手机端