web-dev-qa-db-fra.com

Apache 2.2 n'identifiant pas Safari avec HTTP_USER_AGENT

J'ai un serveur Web qui doit répondre aux exigences de conformité PCI. Leur dernière série de modifications de stratégie a supprimé la prise en charge de Safari, après la suppression de la prise en charge des clients Windows XP based IE. Le code ci-dessous est idéal pour envoyer les utilisateurs de navigateurs compatibles sur le site SSL, mais ne parvient pas à identifier Safari pour une raison quelconque. La conformité PCI indique que nous ne pouvons pas utiliser le chiffrement TLS 1.0, qui est le niveau de chiffrement le plus élevé actuellement pris en charge par Safari. Notre page non-SSL affiche un en-tête informant l'utilisateur de son problème et lui demandant de passer à un navigateur plus sécurisé.

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} !Version/[1-5] [OR]
RewriteCond %{HTTP_USER_AGENT} !MSIE\ ([6-8])
RewriteCond %{HTTP_Host} sa\.edu [NC]
RewriteCond %{HTTP_Host} www\.sa\.edu [NC]
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/(.*) https://www.sa.edu/$1 [NC,R,L]

J'ai fait un test de regex sur la ligne Safari et cela fonctionne dans Regex. J'ai également examiné les différentes chaînes d'agent d'utilisateur utilisées pour voir le fil conducteur entre les navigateurs Safari. La version/[1-5] semble être le fil conducteur. J'ai également essayé de frapper avec! Safari et cela ne semble pas les attraper non plus, ce qui devrait avoir pour conséquence que les utilisateurs Chrome et Safari transmettent tous deux une chaîne Safari. Vous trouverez ci-dessous la ligne d’agent utilisateur du navigateur Safari avec lequel je teste et le navigateur Chrome depuis lequel je teste.

Chrome:

Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36

Safari

Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2
1
Shadowbranch

Votre logique semble être inversée ... vous devez supprimer le drapeau OR à la fin de la première directive RewriteCond. Cela semble être une implicite AND:

RewriteCond %{HTTP_USER_AGENT} !Version/[1-5]
RewriteCond %{HTTP_USER_AGENT} !MSIE\ ([6-8])

En d'autres termes ... si ce n'est pas Safari et ce n'est pas IE6-8 alors continuez ...

Si vous OR ces deux conditions, il est probable que le résultat sera toujours true et vous serez toujours redirigé.

(Je suppose que votre expression rationnelle est correcte.)

1
MrWhite

Vous y êtes presque, la règle de réécriture devrait être:

RewriteRule ^(.*)$ https://www.sa.edu/$1 [NC,L,R=301]

et les conditions de réécriture pour la détection du navigateur doivent être les suivantes:

RewriteCond %{HTTP_USER_AGENT} !Version/[1-5]
RewriteCond %{HTTP_USER_AGENT} !MSIE\ ([6-8])
RewriteCond %{HTTP_USER_AGENT} !Trident #this actually detects all of the Internet Explorer versions
0
bodi0