IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Apache Discussion :

Allow/Deny : conjonction de 2 règles


Sujet :

Apache

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2004
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 57
    Par défaut Allow/Deny : conjonction de 2 règles
    Bonjour à tous,

    J'ai un pb qui me paraissait a priori simple mais je tourne en rond depuis un moment.

    Je veux autoriser une partie de mon site aux requêtes qui satisfont à la fois aux 2 conditions suivantes :

    - elles proviennent de la machine x.y.z.t
    - elles ont dans leur header HTTP une variable VAR égale à "valeur"

    Les autres doivent être rejetées.

    La première, je sais l'écrire :

    La seconde, je sais l'écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SetEnvIf VAR "^valeur$" OK
    Allow from env=OK
    Mais la conjonction des deux, je n'arrive pas à le faire, j'ai beau jouer avec les Order Deny,Allow Allow,Deny, c'est trop dur !

    Quelqu'un peut-il m'aider ?

    Merci d'avance.

  2. #2
    Membre confirmé
    Inscrit en
    Juillet 2004
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 57
    Par défaut
    Après de nombreux essais, je pense que la solution à mon problème ressemble à cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Order Allow,Deny
     
    Allow from All
     
    SetEnvIf Remote_Addr ".*" machineInterdite
    SetEnvIf Remote_Addr "^x\.y\.z\.t$" !machineInterdite
    Deny from env=machineInterdite
     
    SetEnvIf VAR ".*" valeurInterdite
    SetEnvIf VAR "^valeur$" !valeurInterdite
    Deny from env=utilisateurInterdit
    Cela revient à interdire les accès qui proviennent d'une machine qui n'est pas la bonne (le premier pavé), et ceux dont la variable VAR n'a pas la bonne valeur (le second).

    Ce qui correspond à mon besoin.

    Remarque : les 2 lignes ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SetEnvIf Remote_Addr ".*" machineInterdite
    SetEnvIf Remote_Addr "^x\.y\.z\.t$" !machineInterdite
    permettent d'exprimer que machineInterdite existe (est vrai) sauf si Remote_Addr == "x.y.z.t"

    La syntaxe suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetEnvIf attribute regex !env-variable
    permet de supprimer une variable si elle est déjà définie et que le test est positif.


    Voilà, tout est dit ...

    Est-ce que cela marche comme je le pense ? Y aurait-il eu plus simple ?

    Merci d'avance.

  3. #3
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Citation Envoyé par dedz Voir le message
    Est-ce que cela marche comme je le pense ?
    Et bien, faut tester !!!

    Citation Envoyé par dedz Voir le message
    Y aurait-il eu plus simple ?
    T'as essayé ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SetEnvIf VAR "^valeur$" OK
    Allow from x.y.z.t env=OK
    Tu peux mettre plusieurs entrées sur un Allow.

  4. #4
    Membre éprouvé Avatar de SirDarken
    Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2004
    Messages : 897
    Par défaut
    je crois qu'une clause peut t'aider:

    satisfy any : authorise une ou l'autre.
    satisfy all : doit avoir les 2 conditiones.

    J'ai péché cette info sur un autre exemple mais tente de l'appliquer on sais jamais.

    Deux possibilités sont offertes :

    * On autorise les accès depuis un certain sous-domaine plus des mots de passe ailleurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    AuthUserFile /usr/local/bin/www/httpd_1.3/basedenoms/.htpasswd
    AuthGroupFile /dev/null
    AuthName AccesRestreint
    AuthType Basic
     
    <limit GET POST>
    order deny,allow
    deny from all
    allow from .enst.fr
    require user martin
    satisfy any
    </Limit>

    Dans cet exemple, sont autorisées les personnes connectées depuis le sous-domaine .enst.fr ainsi que la personne de nom martin (citée dans le fichier .htpasswd) qui peut se connecter d'un tout autre endroit. C'est la clause satisfy any qui permet l'une ou l'autre des deux autorisations.
    * On autorise les accès depuis un certain sous-domaine en faisant de plus intervenir des mots de passe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    AuthUserFile /usr/local/bin/www/httpd_1.3/basedenoms/.htpasswd
    AuthGroupFile /usr/local/bin/www/httpd_1.3/basedenoms/.htgroup
    AuthName AccesRestreint
    AuthType Basic
     
    <limit GET POST>
    order deny,allow
    deny from all
    allow from .enst.fr
    require group intranet
    satisfy all
    </Limit>
    Dans cet exemple, sont autorisés les personnes connectées depuis le sous-domaine .enst.fr à condition de faire partie du groupe intranet (défini dans .htgroup). C'est la clause satisfy all qui permet la combinaison des deux conditions.
    Cette possibilité est particulièrement utile dans le cas où on a défini deux groupes non forcément disjoints et qu'on souhaite ne donner l'accès qu'à l'intersection des deux groupes, sans remettre en cause la constitution propre de chaque groupe.
    J'espère pas être à coté de la plaque :p

Discussions similaires

  1. Allow plage IP, deny from all
    Par dj-julio dans le forum Apache
    Réponses: 7
    Dernier message: 25/02/2009, 13h09
  2. Politique allow deny
    Par SpaceFrog dans le forum Apache
    Réponses: 4
    Dernier message: 23/01/2009, 12h11
  3. politique allow deny sur hostname
    Par SpaceFrog dans le forum Apache
    Réponses: 20
    Dernier message: 08/12/2008, 17h41
  4. [ASP] Role allow et deny
    Par meda dans le forum ASP.NET
    Réponses: 5
    Dernier message: 15/05/2007, 11h19
  5. hosts.allow et hosts.deny
    Par troumad dans le forum Administration système
    Réponses: 1
    Dernier message: 13/11/2006, 07h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo