41 votes

htaccess - utilisation d'un mot de passe OU d'une liste blanche d'adresses IP

Je veux donc restreindre l'accès à une url. S'ils viennent d'une adresse IP donnée, ils ne doivent pas être invités à saisir un mot de passe. S'ils ne viennent pas d'une adresse IP donnée, ils doivent être invités à saisir un mot de passe.

donc un soit ou soit de :

AuthUserFile /some/path/.htpasswd
AuthName "Please Log In"
AuthType Basic
require valid-user

et :

order deny,allow

deny from all
allow from x.x.x.x

65voto

FbnFgc Points 894

Vous pouvez utiliser le programme Apache "Satisfait" directive.

Voici un exemple d'utilisation :

AuthType Basic
AuthName "Please Log In"
AuthUserFile /some/path/.htpasswd
Require valid-user
Order deny,allow
Deny from all
Allow from 127.0.0.1
Satisfy any

L'accès sans mot de passe n'est autorisé que depuis 127.0.0.1.

J'espère que cela vous aidera.

0 votes

+1 c'est exactement ce que je fais. De plus, si vous voulez désactiver les vérifications dans un certain répertoire (par exemple, un répertoire public/), il suffit de placer dans le sous-répertoire .htaccess :

0 votes

Allow from all y Satisfy any

12voto

Olaf Dietsche Points 35264

Avec Apache 2.4 Satisfy est toujours disponible, mais déprécié

Note

Les directives fournies par mod_access_compat ont été supprimées par mod_authz_host. Mélanger les anciennes directives comme Order, Allow ou Deny avec les nouvelles comme Require est techniquement possible mais déconseillé. Ce module a été créé pour prendre en charge les configurations ne contenant que d'anciennes directives afin de faciliter la mise à niveau vers la version 2.4. Veuillez consulter le guide de mise à niveau pour plus d'informations.


Dans votre cas Allow from 1.2.3.4 est remplacé par Require ip 1.2.3.4

En combinant plusieurs Require (comme Require valid-user y Require ip ) peut être fait par Conteneurs d'autorisation . Ainsi, pour indiquer que le client doit soit fournir un mot de passe, soit provenir d'une adresse IP spécifique, il suffit d'entourer les directives de la mention RequireAny par exemple

<RequireAny>
    Require valid-user
    Require ip 1.2.3.4
</RequireAny>

Bien qu'il s'agisse d'un cas particulier, comme décrit à la fin de l'article. Require

Lorsque plusieurs directives Require sont utilisées dans une même section de configuration et ne sont pas contenues dans une autre directive d'autorisation telle que <RequireAll> , ils sont implicitement contenus dans un <RequireAny> directive. Ainsi, la première autorisation d'un utilisateur autorise l'ensemble de la demande, et les directives Require suivantes sont ignorées.

En d'autres termes, RequireAny est facultatif ici, et vous pouvez simplement lister

Require valid-user
Require ip 1.2.3.4

0 votes

Pouvez-vous nous montrer une version qui recherche une IP valide et qui, si ce n'est pas le cas, demande le mot de passe, avec l'emplacement du htpasswd ?

0 votes

@drooh Je n'ai pas testé, mais peut-être qu'en mettant l'option Require ip Le premier pourrait faire l'affaire. Si ce n'est pas le cas, posez une nouvelle question.

0voto

chrisX Points 1

Cela fonctionne parfaitement pour moi :

AuthType Basic
AuthName "myserver publicname"
AuthUserFile "/myserverpath/.htpasswds/public/passwd"
require ip 100.12.255.233
require valid-user

Note : J'ai juste placé 'require ip' avec 'my example ip' avant 'require valid-user' et cela fait l'affaire. Je peux me connecter à partir de mon ip sans mot de passe demandé, mais si j'accède à partir d'autres endroits ou de mes appareils mobiles, j'ai besoin du mot de passe.

L'option "Satisfaire n'importe qui" n'était pas bonne pour moi ( !), car elle a désactivé d'autres paramètres .htaccess dans la hiérarchie inférieure de mon application et a rendu mon site non sécurisé.

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