簡體   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