Dotclear

Ticket #1979 (closed defect: fixed)

Opened 10 years ago

Last modified 8 years ago

.htaccess incorrects pour apache v2.24+

Reported by: dClauzel Owned by: team
Priority: normal Milestone: 2.10
Component: module:core Version: 2.6.4
Severity: normal Keywords: .htaccess
Cc:

Description

Dotclear fourni 2 fichiers .htaccess (inc/.htaccess et plugins/.htaccess) qui cassent la configuration d’apache v2.24+, l’empêchant de tourner.

Ils contiennent chacun la  directive obsolète « Deny from all » pour les version récentes d’apache, qui demandent la syntaxe « Require all denied ».

Une solution — en attendant que les retardataires mettent à jour leur apache ;) — est de faire un test dans ces .htaccess afin de présenter la directive adaptée.

<IfVersion >= 2.4>
  Require all denied
</IfVersion>
<IfVersion < 2.4>
  Deny from all
</IfVersion>

Autrement, pour chaque mise à jour l’administrateur est obligé de restaurer les .htaccess d’origine, de passer la mise à jour, puis de remettre ses .htaccess. Lourd.

Change History

comment:1 Changed 10 years ago by vincent

Cette solution nécessite le module mod_version qui n'est pas forcément disponible ; j'ai trouvé une solution qui me semble plus portable car elle utilise le core d'apache :

# Apache 2.4
<IfModule mod_authz_core.c>
    Require all denied
</IfModule>

# Apache 2.2
<IfModule !mod_authz_core.c>
    Order Allow,Deny
    Deny from all
</IfModule>

source :  http://blog.plee.me/2013/07/access-control-via-hybrid-htaccess-for-both-apache-httpd-2-2-and-2-4/

comment:2 Changed 10 years ago by dClauzel

Hummm, mod_version est standard à apache depuis la v2.0.56 (mais dans les extensions, il est vrai).

Par contre, attention :  mod_authz_core n’existe que depuis la version 2.23+, donc il faudra qu’un apache v2.22 sache gérer sa non-existence.

Je n’ai pas de vieil apache sous la main pour faire des essais, quelqu’un peut tester les différentes approches pour voir que ça passe bien ?

comment:3 follow-up: ↓ 4 Changed 10 years ago by philippe

Commentaire de néophyte : chez moi en local j'ai un serveur Apache en version 2.4.9 (win64) qui fonctionne apparemment sans problème. L'accès au répertoire dotclear/plugins ou dotclear/inc est bien bloqué par la seule directive Deny from all. C'est normal ?

comment:4 in reply to: ↑ 3 Changed 10 years ago by dClauzel

Replying to philippe:

Commentaire de néophyte : chez moi en local j'ai un serveur Apache en version 2.4.9 (win64) qui fonctionne apparemment sans problème. L'accès au répertoire dotclear/plugins ou dotclear/inc est bien bloqué par la seule directive Deny from all. C'est normal ?

Tu as très probablement le  mod_access_compat de chargé, qui ajoute le support des anciennes directives.

La recommandation est de mettre à jour ces directives de contrôle d’accès avec la nouvelle syntaxe, car la rétrocompatibilité ne sera pas éternelle; dans un futur proche, tu ne pourras pas relancer ton serveur après une mise à jour.

comment:5 Changed 10 years ago by philippe

Gagné pour le access_compat_module et merci pour l'explication de texte ;)

comment:6 Changed 10 years ago by vincent

Pour ma part, j'ai un Apache 2.4.4 qui a bien l'extension mod_version mais qui n'est pas activée par défaut.

D'où ma recherche sur la question après avoir tester le code initial.

Sinon on peut essayer de combiner :

<IfModule mod_version>
    <IfVersion >= 2.4>
        Require all denied
    </IfVersion>
    <IfVersion < 2.4>
        Deny from all
    </IfVersion>
</IfModule>

<IfModule !mod_version>
    <IfModule mod_authz_core.c>
        Require all denied
    </IfModule>

    <IfModule !mod_authz_core.c>
        Order Allow,Deny
        Deny from all
    </IfModule>
</IfModule>

C'est lourd, c'est moche et ça laisse le cas d'apache < 2.23 sans mod_version activé, mais j'vois pas trop comment faire mieux.

comment:7 Changed 8 years ago by franck

Puisqu'il s'agit, a priori, d'interdire l'accès à deux répertoires par vraiment fréquentés habituellement, est-ce qu'un simple

Require all denied
Deny from all

Ne suffirait pas ?

Vous pourriez tester ce .htaccess chez vous et me dire avec quelle version d'Apache et si ça gueule ?

comment:8 Changed 8 years ago by franck

En tout cas ça ne casse pas un Apache 2.2, reste à voir avec une version plus récente.

comment:10 Changed 8 years ago by franck

  • Milestone changed from A definir to 2.10

comment:9 Changed 8 years ago by franck <carnet.franck.paul@…>

  • Status changed from new to closed
  • Resolution set to fixed

(In [31c893d40e5b]) Add Apache 2.4 directive (Require all denied) for private folders, should fixes #1979

Note: See TracTickets for help on using tickets.

Sites map