Comment obtenir une demande http origine en php
Je veux créer une API, et à l'API d'authentification des consommateurs, je vais vous donner une CLÉ API, Application-id et App Secret. Le problème est que je veux savoir où la Requête http est pour que je puisse savoir si l'Hôte qui fait que la demande est l'Hôte enregistré. Par exemple : www.someone.com a un app-id :0001, app-secret:1200 et de l'api-clés:458. Si cette informations d'identification sont utilisées pour faire Une demande, je veux savoir si le demandeur est vraiment www.someone.com
- Pour l'origine l'utilisation de cette
header("Access-Control-Allow-Origin: " . $_SERVER['HTTP_ORIGIN'] . "");
et ensuite de vérifier les informations d'identification de GET ou POST variable - À l'aide de l'origine comme une mesure de sécurité qui est au-delà de l'inutile. Cet en-tête peut facilement être faux. Au lieu de cela, vous pourriez vouloir travailler avec un rappel à en passer un "jeton de demande" (pensez à la façon dont le protocole oauth flux de travaux).
- À l'aide de HTTP_ORIGIN ou HTTP_REFERER sans vérifier eux est "par essence" même à faire"*", ce qui peut ouvrir de subtils des trous de sécurité est donc déconseillé, voir stackoverflow.com/questions/12001269/...
- Une réponse à la question réelle "Comment obtenir une demande http origine" peut être trouvé ici: stackoverflow.com/questions/41326257/...
Vous devez vous connecter pour publier un commentaire.
Utilisation
$_SERVER['HTTP_REFERER']
. C'est l'adresse de la page (le cas échéant) qui se réfère à l'agent utilisateur de la page en cours. Il est défini par l'agent utilisateur. Pas tous les agents d'utilisateur de définir ce, et certains offrent la possibilité de modifierHTTP_REFERER
comme une caractéristique.Pour plus de restrictions, vous pouvez effectuer les opérations suivantes.
example.com
doit être changé à votre domaine.IIS défini ci-dessous dans la configuration web de:
Apache sur ci-dessous dans httpd.conf/apache.conf
HTTP_ORIGIN
est le mieux dans ce cas queHTTP_REFERER
; siHTTP_ORIGIN
est manquant, alors vous pouvez revenir à l'utilisation d'HTTP_REFERER
, mais je conseille à l'encontre de ce pour la sécurité (il est plus facile de changer le referer de l'origine, de l'origine est répertorié comme un "interdit" en-tête et les navigateurs doit empêcher d'éventuelles modifications à l'origine de la prise de la place).Généralement, cet en-tête doit faire le travail. Avoir le nom de domaine dans cet en-tête
mais si vous voulez vérifier pour plus d'informations, utilisez quelque chose comme l'extrait de code suivant
Si les utilisateurs doivent passer plus de données à votre service, de l'utilisation
POST
au lieu deGET
$allowed
tableau à partir de ci-dessus peut sembler même de cette façon$allowed = array('domain1' => '1.2.3.4', 'domain2' => '5.6.7.8', 'domain3' => '2.4.6.8');
et puis vous pouvez utilisergethostbyname('domain')
et comparez retourné IP de l'hôte avec l'adresse IP dans votre tableau.gethostbyname('www.your-client.com')
mais si vous avez besoin de l'adresse IP de l'ordinateur à partir de provenance de la demande, utilisation$_SERVER['REMOTE_ADDR']
*
, ce qui n'est pas mieux. Cette réponse présente un problème de sécurité.header("Access-Control-Allow-Origin: " . $_SERVER['HTTP_ORIGIN'] . "");
dans la premièreif
déclaration.$allowed
et qui fait d'elle une bonne réponse.HTTP_ORIGIN
valeur d'être usurpée/faux?Laravel 5: dans la méthode de requête contrôleur:
request()->headers->all();
Je pense que ce que tu veux dire, c'est que vous voulez accéder à "l'Origine" de l'en-tête en-têtes de la requête (par opposition à définir dans les en-têtes de réponse).
Pour cela, le plus simple est d'accéder à la construit en getallheaders() fonction - qui est un alias pour apache_request_headers() - N. B. c'est en supposant que vous utilisez php en tant que module.
Ce retourne un tableau afin de l'en-tête d'Origine devrait être disponible comme ceci:
Si vous utilisez php via quelque chose comme fastcgi alors je crois qu'il serait mis à disposition dans l'environnement - généralement portés à l'actif et préfixé par "HTTP_", il devrait donc être
$_SERVER['HTTP_ORIGIN']
.Espoir qui aide à quiconque cherche à présent 🙂
À l'aide d'un
var_dump
vous pouvez voir tout ce que lerequest
a à offrir.Faire un
var_dump
sur leserver
mondiale ainsi. Il contient beaucoup d'information utile.