109 votes

Comment puis-je détecter si l'utilisateur est sur localhost en PHP ?

En d'autres termes, comment puis-je savoir si la personne qui utilise mon application Web se trouve sur le serveur sur lequel elle réside ? Si je me souviens bien, PHPMyAdmin fait quelque chose comme ça pour des raisons de sécurité.

183voto

mauris Points 19666

Vous pouvez également utiliser $_SERVER['REMOTE_ADDR'] pour lequel l'adresse IP du client demandeur est donnée par le serveur web.

$whitelist = array(
    '127.0.0.1',
    '::1'
);

if(!in_array($_SERVER['REMOTE_ADDR'], $whitelist)){
    // not valid
}

2 votes

Ce qui rendrait cette méthode plus facile à casser que l'usurpation d'adresse IP. Vous devriez vraiment le changer.

0 votes

Cela ne fonctionne pas pour moi. $_SERVER['HTTP_HOST'] renvoie la partie textuelle de mon domaine (par exemple "exemple" si le domaine était www.example.com).

3 votes

@skcin7 peut être le paramètre de votre serveur. Vérifiez-le.

34voto

Jens Törnell Points 1797

En tant que complément, en tant que fonction...

function isLocalhost($whitelist = ['127.0.0.1', '::1']) {
    return in_array($_SERVER['REMOTE_ADDR'], $whitelist);
}

6 votes

Comme bonne pratique, je recommanderais d'ajouter "else return false ;" afin que la fonction renvoie toujours une valeur booléenne. Ou encore, supprimez complètement le "if" et remplacez-le par "return in_array( $_SERVER['REMOTE_ADDR'], $whitelist) ;".

18voto

reekogi Points 854

Les utilisateurs de systèmes d'exploitation plus récents (Win 7, 8) peuvent également trouver nécessaire d'inclure une adresse distante au format IPV6 dans leur liste blanche :

$whitelist = array('127.0.0.1', "::1");

if(!in_array($_SERVER['REMOTE_ADDR'], $whitelist)){
    // not valid
}

14voto

Pekka 웃 Points 249607

$_SERVER["REMOTE_ADDR"] devrait vous indiquer l'IP de l'utilisateur. Mais il est possible de l'usurper.

Vérifiez cette question de prime pour une discussion très détaillée.

Je pense que ce dont vous vous souvenez avec PHPMyAdmin est quelque chose de différent : De nombreux serveurs MySQL sont configurés de manière à ce qu'on ne puisse y accéder que depuis localhost pour des raisons de sécurité.

0 votes

Il convient de noter que certains serveurs MySQL sont ainsi configurés en ne se liant pas à une interface publique. De même, si vous vouliez restreindre une application PHP de la même manière, vous devriez envisager de la servir via une instance apache liée uniquement à une interface interne.

6voto

nicola Points 799

Il ne semble pas que vous deviez utiliser $_SERVER['HTTP_HOST'] car c'est la valeur de l'en-tête http, facilement falsifiable.

Vous pouvez utiliser $_SERVER["REMOTE_ADDR"] aussi, c'est la valeur la plus sûre, mais il est également possible de la falsifier. Ce site remote_addr est l'adresse à laquelle Apache renvoie le résultat.

0 votes

REMOTE_ADDR est possible à truquer, cependant si vous voulez le truquer en tant que 127.0.0.1 ou ::1 qui nécessite de compromettre la machine, à laquelle un spoofed REMOTE_ADDR est le dernier de vos soucis. Réponse pertinente - stackoverflow.com/a/5092951/3774582

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X