Client IPv6 sur PHP mais IPv4 sur le serveur de nœuds - ils doivent être identiques
P粉239164234
2023-09-04 19:35:35
<p>Je rencontre un problème lié à la sécurité et à l'authentification. J'ai un logiciel qui vérifie la confirmation de l'utilisateur et je dois m'assurer que c'est le même client qui envoie la requête PHP et la requête du serveur de nœud. Cependant, sur le serveur de nœud, l'adresse IP du client est affichée comme IPv4, tandis que sur PHP, elle est affichée comme IPv6. Existe-t-il un moyen d'obtenir le même résultat quelque part, comme extraire IPv6 sur un serveur de nœuds ou extraire IPv4 sur un serveur PHP ? Merci. </p>
<p>Obtenez la même adresse IP ou vérifiez s'il s'agit du même client même si IPv4 et IPv6 sont "différents"</p>
Le problème est qu'IPv6 et IPv4 ne sont en aucun cas couplés. Une adresse v6 ne peut pas être déduite d’une adresse v4 ou vice versa.
À mon humble avis, vous devriez éviter d'authentifier les utilisateurs par adresse IP, car les adresses IP sont usurpées et cette pratique peut entraîner des problèmes comme celui-ci. Cela dit, il existe plusieurs « solutions ».
Désactivez IPv6 sur le serveur web hébergeant votre application PHP. Puisque vous n'avez pas mentionné de quel type de serveur Web il s'agit, vous devriez pouvoir rechercher sur Google quelque chose comme "désactiver Apache ipv6" pour savoir comment y parvenir. Cela devrait garantir que les adresses IPv4 sur les deux serveurs sont les mêmes. Personnellement, je n'aime pas cette solution car elle entrave l'adoption d'IPv6.
Activez IPv6 sur le serveur de nœud. Notez qu'un client peut toujours préférer IPv4 à IPv6 pour une raison quelconque, et rien ne garantit qu'il utilisera IPv6 pour les deux serveurs réseau.
Vous pouvez proxy tous les appels d'un serveur Web à un autre et transmettre l'adresse IP d'origine dans l'en-tête "X-Forwarded-For". Cela introduira une certaine surcharge, mais l'adresse IP source sera plus stable.
Personnellement, j'éviterais d'utiliser des adresses IP et implémenterais une sorte de jeton stocké sur le client et pouvant être vérifié sur les deux serveurs via une base de données partagée si possible.