繁体   English   中英

如何在php中获取http请求源

[英]How to get http request origin in php

我想创建一个 API,为了验证 API 消费者,我将提供一个 API KEY、App-id 和 App-Secret。 问题是我想知道http请求是从哪里来的,这样我就可以知道发出que请求的主机是否是注册的主机。 例如:www.someone.com 有一个 app-id:0001、app-secret:1200 和 api-key:458。 如果这个凭证是用来做A请求的,我想知道这个请求者是不是真的www.someone.com

通常,这个标题应该可以完成这项工作。 在此标头中包含域名

header("Access-Control-Allow-Origin: " . $_SERVER['HTTP_ORIGIN'] . "");
// use domain name instead of $_SERVER['HTTP_ORIGIN'] above

但如果你想检查更多信息,请使用类似以下代码段的内容

$allowed = array('domain1', 'domain2', 'domain3'); 

if(isset($_SERVER['HTTP_ORIGIN']) && in_array($_SERVER['HTTP_ORIGIN'], $allowed)){
    // SELECT credentials for this user account from database
    if(isset($_GET['api_key'], $_GET['app_secret'])
        && $_GET['api_key'] == 'api_key_from_db' 
        && $_GET['app_secret'] == 'app_secret_from_db'
    ){
        // all fine
    }else{
        // not allowed
    }
}else{
    // not allowed
}

如果用户必须向您的服务传递更多数据,请使用POST而不是GET

Laravel 5 :在请求方法控制器中:

$origin = request()->headers->get('origin');

使用$_SERVER['HTTP_REFERER'] 它是将用户代理引用到当前页面的页面地址(如果有的话)。 这是由用户代理设置的。 并不是所有的用户代理都会设置这个,有些提供修改HTTP_REFERER的能力作为一个特性。

对于进一步的限制,您可以执行以下操作。 example.com应该更改为您的域。

IIS 在 web 配置中设置如下

add name="Access-Control-Allow-Origin" value="http://www.example.com"

Apache 在 httpd.conf/apache.conf 中设置如下

Header add Access-Control-Allow-Origin "http://www.example.com"

从技术上讲,无论是origin还是referer都不需要 HTTP 标头,所有这些答案都基于发送的特定浏览器标头,并且根据客户端的不同行为建立系统是一个坏主意。

正确答案是您无法可靠地获取每个请求的客户端来源,因为它不是 HTTP 规范的一部分。

使用var_dump您可以看到request必须提供的所有内容。

var_dump($_REQUEST);

也在server全局上做一个var_dump 它包含很多有用的信息。

var_dump($_SERVER);

我认为您的意思是您想访问请求标头中的“Origin”标头(而不是在响应标头中设置它)。

为此,最简单的方法是访问内置的getallheaders()函数 - 它是apache_request_headers () 的别名 - 注意,这是假设您使用 php 作为模块。

这将返回一个数组,因此 Origin 标头应该像这样可用:

$request_headers = getallheaders();
$origin = $request_headers['Origin'];

如果您通过诸如 fastcgi 之类的东西使用 php,那么我相信它会在环境中可用 - 通常大写并以“HTTP_”为前缀,所以它应该是$_SERVER['HTTP_ORIGIN']

希望能帮助其他人寻找这个:)

在 laravel 7 这对我有用

request()->headers->get('referer');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM