2008-11-08 7 views
2

J'essaie de créer une API de base pour mon site Web afin que certains autres sites Web que j'approuve puissent afficher du contenu de mon site. J'ai un script PHP sur mon serveur que les autres sites Web peuvent accéder pour extraire le contenu au format XML. Comment puis-je m'assurer que seulement certains sites Web peuvent accéder à cette page php sur mon serveur?Autoriser seulement certains sites Web à accéder à une page PHP

Répondre

5

La plupart des API nécessitant un type d'authentification similaire optent pour les clés API. Juste une grande longue chaîne qui est passée dans la requête.

Vous pouvez renforcer cela en résolvant l'adresse IP du domaine et en vérifiant cela par rapport à la requête entrante. Cela est lent et coûteux, donc cachez les recherches IP (mais assurez-vous de les nettoyer car les adresses IP des domaines changent légitimement!)

+0

Encore mieux, combinez l'IP avec une clé publique et un sel secret dans un HMAC (http://en.wikipedia.org/wiki/Hash-based_message_authentication_code). Mais seulement si les IP sont connus pour être statiques. –

4

Autoriser uniquement des utilisateurs spécifiques par adresse IP est assez simple avec .htaccess.

Normalement, vous l'utiliser pour bloquer des adresses IP spécifiques comme celui-ci

Order allow, deny 
Deny from 192.168.0.10 
Deny from 212.155. 
Deny from 1.2.3.4 5.6.7.8 127.0.0.1 
Allow from all 

Mais vous pouvez aussi l'utiliser pour autoriser l'accès des utilisateurs spécifiques, comme celui-ci

Deny from all 
Allow from 1.2.3.4 

EDIT: Si vous devez absolument le faire à partir d'un script (après une deuxième lecture attentive de votre question, je pense que vous le faites), alors vous pouvez le faire comme ça.

<? 
    $allowed[0]="xxx.xxx.xxx.xxx"; 
    $allowed[1]="yyy.yyy.yyy.yyy"; 

    // add as many as you need 

    if (!in_array($_SERVER['REMOTE_ADDR'],$allowed)) header("HTTP/1.1 403 Forbidden"); 
?> 
2

Une option simple consisterait à placer les pages dans un répertoire, puis à activer l'authentification HTTP de base. Vous devez attribuer des noms d'utilisateur & aux mots de passe que vous souhaitez accéder au contenu.

Une URL peut encoder le nom d'utilisateur et mot de passe: http://username:[email protected]/ ...

De cette façon, aucun changement sont nécessaires sur votre extrémité au-delà de modifier le fichier .htaccess ou l'extrémité distante, autre que de spécifier une URL légèrement différente . Les noms d'utilisateur et les mots de passe sont transmis en clair sur Internet, vous devez donc décider si ce risque est acceptable.

+0

La façon normale de contourner le fait qu'il est envoyé en clair est soit d'utiliser digest auth au lieu de basic, soit d'utiliser https. L'une ou l'autre solution est acceptable et sécurisée. –

Questions connexes