web-dev-qa-db-fra.com

Comment obtenir une requête http Origin en php

Je souhaite créer une API et authentifier les utilisateurs d’API en fournissant une clé d’API, un identifiant d’application et un secret d’application. Le problème est que je veux savoir d’où vient la requête http afin de savoir si l’hôte qui fait la demande est l’hôte enregistré. Par exemple: www.someone.com a un identifiant d’application: 0001, app-secret: 1200 et api-key: 458. Si ces informations d'identification sont utilisées pour effectuer une demande, je souhaite savoir si le demandeur est vraiment www.someone.com

5
m_junior

Utilisez $_SERVER['HTTP_REFERER']. C'est l'adresse de la page (le cas échéant) qui a renvoyé l'agent utilisateur à la page en cours. Ceci est défini par l'agent utilisateur. Tous les agents utilisateurs ne le définiront pas, et certains offrent la possibilité de modifier HTTP_REFERER en tant que fonctionnalité.

Pour d'autres restrictions, vous pouvez effectuer les opérations suivantes. example.com devrait être changé pour votre domaine.

IIS défini ci-dessous dans la configuration Web :

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

Apache défini ci-dessous dans httpd.conf/Apache.conf

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

Généralement, cet en-tête devrait faire l'affaire. Avoir le nom de domaine dans cet en-tête

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

mais si vous voulez vérifier plus d'informations, utilisez quelque chose comme l'extrait suivant

$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
}

Si les utilisateurs doivent transmettre plus de données à votre service, utilisez POST au lieu de GET

16
hex494D49

Je pense que ce que vous voulez dire, c'est que vous voulez accéder à l'en-tête "Origin" dans les en-têtes de requête (au lieu de le définir dans les en-têtes de réponse). 

Pour cela, le moyen le plus simple consiste à accéder à getallheaders () function - qui est un alias pour Apache_request_headers () - N.B. cela suppose que vous utilisez php en tant que module. 

Cela retourne un tableau, donc l'en-tête Origin devrait être disponible comme ceci:

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

Si vous utilisez php via quelque chose comme fastcgi, alors je pense qu’il serait rendu disponible dans l’environnement - généralement en majuscule et préfixé par "HTTP_", ce qui devrait être $_SERVER['HTTP_Origin']

J'espère que cela aidera tous ceux qui cherchent ça :)

2
sensadrome

En utilisant un var_dump, vous pouvez voir tout ce que la request a à offrir.

var_dump($_REQUEST);

Faites un var_dump sur le server global également. Il contient beaucoup d'informations utiles.

var_dump($_SERVER);
1
Peter

Laravel 5 : contrôleur de méthode de requête:

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