web-dev-qa-db-ja.com

PHPでhttpリクエストオリジンを取得する方法

APIを作成し、APIコンシューマーを認証するために、API KEY、App-id、およびApp-Secretを提供します。問題は、httpリクエストの送信元を知りたいためです。これにより、キューリクエストを行っているホストが登録済みホストであるかどうかを知ることができます。たとえば、www.someone.comにはapp-id:0001、app-secret:1200、api-key:458があります。この資格情報を使用してA要求を行う場合、要求者が本当にwww.someone.comであるかどうかを知りたい

13
m_junior

使用する $_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"
4
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を使用してください

17
hex494D49

Laravel 5:リクエストメソッドコントローラー:

$Origin = request()->headers->get('Origin');
6

を使って var_dumprequestが提供するすべてを見ることができます。

var_dump($_REQUEST);

var_dumpserverグローバルでも同様です。役立つ情報がたくさん含まれています。

var_dump($_SERVER);
2
Peter

つまり、リクエストヘッダーの「Origin」ヘッダーにアクセスする必要があるということです(レスポンスヘッダーで設定するのではなく)。

このための最も簡単な方法は、組み込みのgetallheaders()関数にアクセスすることです。これはApache_request_headers()のエイリアスです-N.B.これは、phpをモジュールとして使用していることを前提としています。

これは配列を返すので、Originヘッダーは次のように使用できるはずです。

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

Fastcgiのようなものを介してphpを使用している場合は、環境で使用できるようになると思います。通常は大文字で先頭に「HTTP_」が付いているため、$_SERVER['HTTP_Origin']になります。

これを探している他の人を助けることを願っています:)

2
sensadrome

laravel 7でこれは私のために働いた

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

0
Ar0010r