.htaccess /.htpasswd bypass si à une certaine adresse IP

Est-il possible d'avoir un .htaccess/.htpasswd access control setup pour un répertoire donné, mais s'ils proviennent d'une adresse IP spécifique, contourner l'authentification login/password?

je sais que vous pouvez faire quelque chose comme cela dans la .htaccess:

order deny,allow
deny from all
allow from 000.000.000.000

mais si vous ajoutez quelque chose dans ce sens:

AuthType Basic
AuthName "restricted area"
AuthUserFile /path/to/.htpasswd
require valid-user

alors il invite pour le mot de passe. Y a-t-il un moyen de faire une configuration si/else type, ou une autre solution de sorte que les utilisateurs comme une IP donnée (ou ensemble d'adresses ip) ne sont pas invité à entrer un mot de passe, mais tout le monde le fait?

38
demandé sur Seybsen 2012-05-02 22:30:31

6 réponses

pour les versions 2.2.X vous pouvez utiliser ce qui suit...

AuthUserFile /var/www/mysite/.htpasswd
AuthName "Please Log In"
AuthType Basic
require valid-user
Order allow,deny
Allow from xxx.xxx.xxx.xxx
satisfy any

évidemment remplacer le chemin vers votre usersfile et l'adresse ip que vous souhaitez contourner l'authentification.

de plus amples explications sur les détails, peuvent être trouvées à:http://httpd.apache.org/docs/2.2/howto/auth.html

65
répondu j5Dev 2012-05-14 13:36:14

Si vous utilisez apache >=2.4, il serait quelque chose comme ceci:

<If "%{REMOTE_ADDR} != '127.0.0.1'">
  AuthType Basic
  AuthName "restricted area"
  AuthUserFile /path/to/.htpasswd
  require valid-user
</If>

pour plus d'info jetez un oeil à la docs.

17
répondu Seybsen 2014-12-22 15:40:26

J'exécute Apache / 2.2.16 (Debian), et j'ai eu un problème similaire, Je l'ai résolu comme ceci:

(ceci peut être exécuté dans les deux an .htaccess file ou directement dans le serveur virtuel sous <Location/>)

Order deny,allow
Deny from all
AuthType Basic
AuthUserFile /home/somesite/.htpasswd
AuthName "No entry, unless"
Require Valid-user
Allow from x.x.x.x
Allow from x.x.x.x
Satisfy Any

j'ai autorisé l'entrée sans mot de passe à partir de deux ip différentes, et le reste doit entrer mot de passe pour entrer.

13
répondu Sverre 2015-07-22 07:45:18

si vous utilisez apache > = 2.4, et que vous voulez autoriser un ensemble D'IP, comme demandé dans la question initiale, vous pouvez le faire comme ceci:

   <If "-R '192.168.0.0/24'">
            Require all granted
    </If>
    <ElseIf "-R '192.168.1.0/24'">
            Require all granted
    </ElseIf>
    <Else>
            AuthType Basic
            AuthName "restricted area"
            AuthUserFile /etc/apache2/.htpasswd
            require valid-user
    </Else>
4
répondu NicoMinsk 2018-01-25 15:28:32

En plus de la réponse de j5Dev:

# Interne IP-Adressen
SetEnvIf Remote_Addr "^127\.0\.0\.1$" IsIntern
SetEnvIf Remote_Addr "^192\.168" IsIntern
# .. add more IP addresses or ranges here

# Authentication, wenn nicht intern
AuthUserFile /path/to/.htpasswd
AuthName "restricted area"
AuthType Basic
require valid-user
Order allow,deny
Allow from env=IsIntern
satisfy any
2
répondu hollodotme 2013-03-12 13:38:44

compatible Apache 2.4:

AuthType Basic
AuthUserFile /www/.htpasswd
AuthName "Protected Area"

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

voir le guide de migration mise à jour de 2.4 à partir de 2.2 pour plus d'exemples.

2
répondu DrDol 2018-08-14 08:18:03