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であるかどうかを知りたい
使用する $_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"
一般に、このヘッダーで十分です。このヘッダーにドメイン名がある
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');
を使って var_dump
request
が提供するすべてを見ることができます。
var_dump($_REQUEST);
var_dump
はserver
グローバルでも同様です。役立つ情報がたくさん含まれています。
var_dump($_SERVER);
つまり、リクエストヘッダーの「Origin」ヘッダーにアクセスする必要があるということです(レスポンスヘッダーで設定するのではなく)。
このための最も簡単な方法は、組み込みのgetallheaders()関数にアクセスすることです。これはApache_request_headers()のエイリアスです-N.B.これは、phpをモジュールとして使用していることを前提としています。
これは配列を返すので、Originヘッダーは次のように使用できるはずです。
$request_headers = getallheaders();
$Origin = $request_headers['Origin'];
Fastcgiのようなものを介してphpを使用している場合は、環境で使用できるようになると思います。通常は大文字で先頭に「HTTP_」が付いているため、$_SERVER['HTTP_Origin']
になります。
これを探している他の人を助けることを願っています:)
laravel 7でこれは私のために働いた
request()-> headers-> get( 'referer');