PapyJP a écrit :
Bonsoir
J'essaie de déterminer en JS quele est le navigateur qui interprète le script. De façon étonnante, IE11 renvoie
userAgent"Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; rv:11.0) like Gecko"
Cela vous semble-t-il normal?
Ne JAMAIS faire confiance à l'attribut HTTP "user-agent"... Celui-ci étant renseigné par l'émetteur de la requête, n'importe quoi peut avoir été mis comme valeur.
Sans virer parano, on peut même généraliser ce principe à tous les attributs HTTP, dont l'initialisation reste le fait de l'émetteur et qui en sus peuvent avoir été modifiés en cours de route (attaque de type "man in the middle", sauf erreur de ma part).
C'est ce qui rend difficile, voire impossible, une détection fiable du navigateur.
La seule façon de savoir quel est le moteur effectif du navigateur se situe côté client en testant en javascript la présence d'une fonction dont on sait qu'elle n'existe que sur ce moteur.
Microsoft ayant une propension naturelle à créer de nouvelles fonctions là où elles existent déjà, c'est un moyen de détecter qu'un IE quelconque sert d'environnement utilisateur.
Côté serveur, on est un peu plus démuni pour la détection.
À noter aussi que les entêtes HTTP renvoyées par un serveur peuvent également se révéler non fiables...
Je développe des servlets Java au boulot et ces servlets renseignent lesdites entêtes. Autant dire que je peux te retourner un "server-name" totalement bidon ou modifier toute autre valeur.
On se sert de ce principe notamment pour renvoyer un nom de serveur autre que celui effectivement utilisé. Celui qui essaie d'attaquer un serveur se présentant comme un IIS aura en fait affaire à un Tomcat. Cela ne protège pas de toute intrusion, les hackers de haut vol étant assez futés pour connaître ce principe, mais cela permet de gagner quelques requêtes HTTP pour la détection des essais de connexion anormaux et donne un peu de mou pour réagir vite.