it-roy-ru.com

Как получить http запрос Origin в php

Я хочу создать API и аутентифицировать потребителей API. Я предоставлю API KEY, App-id и App-Secret. Проблема в том, что я хочу знать, откуда поступает http-запрос, чтобы я мог знать, является ли хост, который делает запрос очереди, зарегистрированным хостом. Например: www.someone.com имеет идентификатор приложения: 0001, секретный ключ приложения: 1200 и ключ API: 458. Если эти учетные данные используются для запроса A, я хочу знать, действительно ли запрашивающий является www.someone.com

5
m_junior

Используйте $_SERVER['HTTP_REFERER']. Это адрес страницы (если есть), которая направила пользовательский агент на текущую страницу. Это устанавливается пользовательским агентом. Не все пользовательские агенты будут устанавливать это, а некоторые предоставляют возможность изменять HTTP_REFERER как функцию.

Для дальнейших ограничений вы можете выполнить следующее. example.com должен быть изменен на ваш домен.

IIS установить ниже в веб-конфигурации :

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"
1
Sunit

Как правило, этот заголовок должен делать эту работу. Наличие доменного имени в этом заголовке

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

16
hex494D49

Я думаю, что вы имеете в виду, что вы хотите получить доступ к заголовку «Origin» в заголовках запроса (в отличие от установки его в заголовках ответа). 

Для этого проще всего получить доступ к встроенной функции getallheaders () , которая является псевдонимом для Apache_request_headers () - N.B. это предполагает, что вы используете php в качестве модуля. 

Это возвращает массив, поэтому заголовок Origin должен быть доступен следующим образом:

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

Если вы используете php через что-то вроде fastcgi, то я считаю, что он будет доступен в среде - обычно с большой буквы и префиксом «HTTP_», поэтому он должен быть $_SERVER['HTTP_Origin']

Надеюсь, что это поможет любому, кто ищет это :)

2
sensadrome

Используя var_dump, вы можете увидеть все, что request может предложить.

var_dump($_REQUEST);

Сделайте var_dump и для server global. Он содержит много полезной информации.

var_dump($_SERVER);
1
Peter

Laravel 5 : в контроллере метода запроса:

$Origin = request()->headers->get('Origin');
1
Kamil Kiełczewski