htaccess
htaccess tricks and stuffs
Bloquer tout le monde sauf un user – agent particulier
2Si comme moi, vous tentez d’intégrer un plugin facebook like alors que votre site est en développement et que par conséquent vous décidez de bloquer l’accès par un htaccess / htpasswd à tout le monde sauf les valid user,
Vous êtes alors confronté au même problème.
Comment faire pour tester l’affichage du like sur votre profil sans temporairement enlever la limite d’accès ?
En cherchant un peu dans les doc apache / htaccess, j’ai découvert qu’il était possible de bloquer certain utilisateur mais d’autoriser des machine sur des ip spécifiées.
Seulement, en regardant mes logs apache, le scrapper de Facebook n’utilise pas tout le temps la même IP mais elle commence apparemment toujours par :
69.63.180.*
Il est possible d’autoriser une classe d’ip comme ceci :
69.63.180.0/255
Pour mon test avec Facebook ca ne marchait pas, j’ai donc décider de trouver un moyen d’autoriser seulement facebook en matchant le user agent de son scrapper.
C’est donc FAISABLE !
Le user-agent du scrapper de facebook est :
« facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php) »
(http://developers.facebook.com/docs/reference/plugins/like)
Pour ce faire, il faut dans le fichier htaccess, définir une variable « d’environnement » qui correspondra aux user agent qui matcheront avec l’expression régulière donnée :
SetEnvIfNoCase User-Agent « .*(facebookexternalhit).* » AllowedAgent
Nous pourrions utiliser SetEnvIf (le ‘NoCase’ correspond à case insensitive)
Et il suffit ensuite d’ajouter la ligne :
allow from env=AllowedAgent
Dans mon cas, j’ai décidé de bloquer tout le monde SAUF soit un utilisateur enregistré, SOIT facebook.
Il faut alors coupler deux types de sécurités:
1/ Bloquer tout le monde : Deny from all
2/ Autoriser les utilisateurs enregistrés (contenus dans le fichier htpasswd) :
require user user1 user2 user3
3/ Autoriser le user agent spécifié :
allow from env=AllowedAgent
4/ Informer à Apache qu’il suffit que l’une des deux conditions soit vérifié pour donner un accès (soit un user, soit le userAgent) :
Satisfy any
Finalement, le fichier htaccess ressemblera à ça :
SetEnvIfNoCase User-Agent ".*(facebookexternalhit).*" AllowedAgent AuthUserFile /path/to/.htpasswd AuthName "Veuillez vous identifier" AuthType Basic Satisfy any Order Deny,Allow Deny from all allow from env=AllowedAgent require user user1 user2 user3
Mes sources : (à lire ! C’est interressant !!)
Les bases du htaccess : http://lebrument.free.fr/wordpress/wordpressfr/?p=50
Plus complet mais en anglais : http://perishablepress.com/press/2006/01/10/stupid-htaccess-tricks/#security