Comment détecter s’il est exécuté sur localhost

J’ai un script PHP où je voudrais détecter si l’utilisateur s’exécute sur une machine locale, non accessible sur Internet. Actuellement, je vérifie l’adresse du serveur à 127.0.0.1. Est-ce la meilleure pratique ou existe-t-il une meilleure façon?

Localhost se traduit toujours par l’adresse IP de bouclage 127.0.0.1 dans IPv4 ou ::1 dans IPv6. La validation de l’adresse IP dans votre application serait donc sécurisée, si vous voulez dire

 if(IPAddress::In(array("127.0.0.1","::1"))) { //Show Application } 

Je doute fort que vous ayez une équipe de pirates élites après votre port 80, mais en passant, il a été question de failles dans l’utilisation d’une adresse IP, car les paquets TCP peuvent être modifiés.

Mais cela ne devrait pas vous inquiéter.

Je ne suis pas sûr que les réponses soient correctes jusqu’à présent, mais il se peut que je sois confus. Je réponds en particulier à la partie de votre question qui dit “non accessible sur Internet”. Voici ma tentative de réponse:

Le serveur Web, pas PHP, écoute sur un socket et accepte les connexions. PHP peut obtenir des informations sur la connexion depuis $ _SERVER ( http://www.php.net/manual/en/reserved.variables.server.php ). Sachez que tout ce que vous vérifiez, c’est d’où vient la connexion – vous ne pouvez pas savoir si votre serveur est disponible via d’autres adresses IP de $ _SERVER. Par exemple, je peux accéder à mon instance locale d’Apache / PHP via l’un des éléments suivants:

  • http: // localhost / ($ _SERVER [“SERVER_ADDR”] => :: 1)
  • http://127.0.0.1/ ($ _SERVER [“SERVER_ADDR”] => 127.0.0.1)
  • http://192.168.75.121/ ($ _SERVER [“SERVER_ADDR”] => 192.168.75.121)
  • http: //shiva.local/ ($ _SERVER [“SERVER_ADDR”] => fe80 :: 21c: 42ff: fe00: 8)

Donc, si votre plan est que l’application ait un comportement différent après avoir vu la valeur “correcte” dans $ _SERVER [“SERVER_ADDR”], vous êtes probablement en sécurité – c’est-à-dire qu’il est peu probable qu’un utilisateur client.

Cela dit, je n’utiliserais aucune de ces techniques pour l’authentification des utilisateurs ou l’autorisation des privilèges / actions des utilisateurs sur une application déployée disponible sur Internet. La seule exception pourrait être que vous ayez une application complète qui ne serait disponible que lorsque vous y accédiez depuis localhost – alors cette technique a probablement du sens et sera suffisamment sûre pour une application personnelle.

Vous pouvez également vérifier le nom d’hôte localhost mais si l’adresse du serveur est 127.0.0.1, elle doit être résolue. C’est la pratique standard sur ipv4. Sur ipv6, vous pouvez vérifier :: 1 comme le suggère Robert Pitt.