Auto_htaccess (poil au ...) (Maj)

Autant mettre tout les futurs détracteurs (en un seul mot) à l'aise de suite, je suis pas *du tout* un ninja du htaccess... plutôt (pas le chien, hein) le genre à copier-coller directement des snippets et pis c'est marre.

 

Ceci dit, c'est pas parce qu'on ne maîtrise pas un sujet qu'il faut s'en tenir éloigné (c'est même précisément le contraire)

 

 

 

Oui, je sais, je digresse, mais bon: ceux qui me connaissent savent que je suis verbeux, pas sérieux et le simple titre de cet article leur aura permis de comprendre qu'il s'agit d'un script qui génèrera tout seul un htaccess pour verrouiller un dossier...

 

Du coup pourquoi perdre du temps qu'on peut passer à admirer trois kilos de tomates fraîches par exemple (c'est cadeau)

 

article écrit le 24 novembre


Certains m'ont très justement fait remarquer lors de la sortie d'auto_restrict, qu'il est aussi simple d'utiliser htaccess pour verrouiller un dossier...

C'est vrai, c'est plus simple, mais moins joli

 

Toutefois, je me suis dit que dans le cas où on veut ajouter des utilisateurs sans se faire ch..., ce serait bien de faire un script.

 


Du coup, le script, le voilà: une fonction qui crée un fichier htaccess et htpasswd en fonction des paramètres qu'on lui donne.

J'ai mis une option $free pour ceux qui seraient hébergés chez... Free (cas particulier pour le htaccess)

 

Auto_htaccess.php


order allow,deny
deny from all

AuthUserFile "'.$passpath.'"
AuthName "'.$message.'"
AuthType Basic

require valid-user
';
            file_put_contents('.htaccess', $htaccontent);

            // création htpasswd
            $htpasscontent='';$r="\n";
            foreach ($users as $user=>$pass) {
                $htpasscontent.=$user.':{SHA}'.base64_encode(sha1($pass,true)).$r;
            }           

            if ($free){
                file_put_contents('.htpasswd', 'deny from all');
                file_put_contents('htpasswd.txt', $htpasscontent);
            }else{
                file_put_contents('.htpasswd', $htpasscontent);
            }
            return true;

        }else{return false;}
    }

?>

 

Dans une page quelconque (index.php par exemple), on appelle le script puis la fonction.

<?php
    include('auto_htaccess.php');

    // ici, on peut bien sûr aller chercher les mots de passe etc ailleurs, 
    // dans un fichier sérurisé par exemple, pour autant qu'on respecte
    // 'login'=>'pass'
    $users=array(
        //'login'=>'pass',
        'admin'=>'pass',
        'foo'=> 'bar'
    );

    protect($users,'Qui va là j\'te prie  ?!')  
    // le premier accès n'est pas protégé mais ce n'est pas très important puisque normalement, c'est l'admin qui lance le premier auto_htaccess 

?>

OK, acces normal...

Bien sûr, on peut coller directement la fonction dans le fichier index.php (ce qui évite un include inutile) si on n'a qu'un appel à faire.

Notez qu'on peut forcer la régénération des fichiers (dans le cas où l'on veut mettre à jour les users) en utilisant l'argument $force_rewrite=true...

 


 

Je n'ai pas testé chez free du fait que je ne dispose pas d'hébergement chez eux... anybody ?!

A plus les aminches ...

[Edit: merci aux commentateurs qui m'ont permis d'améliorer ce script ]

❝ 20 commentaires ❞

1  Silvus le

Pourquoi "dirname(__FILE__)" (Auto_htaccess.php, ligne 8) ?
PHP 5.3 est sorti en juin 2009, on peut peut être utiliser "__DIR__" maintenant !

Aussi, il me semblait que le fait d'avoir le .htpasswd accessible en web, était une vulnérabilité...

 
2  Bronco le

Hinhin, j'adore les gars qui écrivent avec un fusil à pompe

Ceci dit tu as sans doute raison... pour moi, si ça marche comme ça sans inconvénient, faut plus y toucher

En revanche, je n'ai pas saisi la seconde remarque, malgré le sarcasme évident...

 
3  pierre le

Pour :
En revanche, je n'ai pas saisi la seconde remarque
Je pense qu'il fallait lire :
Si on ajoute la directive suivante dans le .htaccess, on rend le fichier .htpasswd inaccessible via le web (sauf erreur de ma part)
<Files .htpasswd>
order allow,deny
deny from all
</Files>
C'est souvent déjà le cas (.htpasswd inaccessible via le web) rapport à la config des serveurs .. mais sinon ..
Et faire de même pour le .htaccess ??!!

 
4  Zalsalamel le

Yosh, aucun rapport avec l'article mais ne sachant pas comment te joindre bronco.

En regardant d'ancienne page en cliquant sur les numéros de page de 1x à 1(x+9)

il ramène "http://www.warriordudimanche.net/x" ou x est l'unité donc 404 etc
au lieu de "http://www.warriordudimanche.net/page1x"

après à 20 c'est bon...

 
5  jerrywham le

Pour le fichier .htpassword, il faut qu'il soit en dehors du dossier racine et donc inaccessible depuis le web, accessible uniquement depuis le serveur.

Par exemple, si les fichiers d'un site (donc accessibles depuis le web) sont dans le dossier /var/www, il faut que le fichier .htpassword soit dans le dossier /var par exemple (/var n'étant accessible que par la machine hôte).

Ton script ne devrait alors pas fonctionner dans ce cas car il n'est pas possible d'écrire dans le dossier /var depuis le web (en appelant le script depuis l'url du site) car cela serait une faille énorme de sécurité (possibilité d'effacer les dossiers et tout le tintouin).

Je ne sais pas si mes explications sont claires.

Quoiqu'il en soit, merci pour le partage. Silvus y fait rien qu'à critiquer d'abord. Y prête même pas ses jouets *triste*

 
6  Bronco le

@JerryWham: c'est en effet beauuuucoup plus clair ! J'ignorais ce détail mais j'y avais pensé.
Je me disais que pour accéder au htaccess il fallait pouvoir accéder au dossier de toutes façons, non ?
Si ce dernier est protégé, on n'est pas sensé être tranquilles ?
Car on peut toujours mettre des htaccess dans des sous-dossiers (j'en ai vu sur plein de projets)...

@Zalsalamel: ok merci, je regarde de suite ;-)

@Pierre: oui, c'est une solution très simple du coup ! Merci également, je modifierai mon script en conséquence.

 
7  e-Jim le

Petite modif que j'ai faite afin d'avoir l'hashage en SHA1 (pour ce que ça vaut. Mais c'est supporté par défaut dans Apache):

ligne 27

-- $htpasscontent.=$user.':'.$pass.$r;
++ $htpasscontent.=$user.':{SHA}'.base64_encode(sha1($pass,true)).$r;

C'est loin d'être la panacée, mais c'est toujours mieux que le mot de passe en clair dans ton .htpasswd.

 
8  Bronco le

Ok merci ! ça m'évite de me pencher dessus !

 
9  Silvus le

Oups, j'ai commenté l'article vite fait avant de partir bosser et ne souhaitais pas paraître aussi critique ... Donc je la refais !

Le script est intéressant, c'est toujours pratique à avoir et très sympa de le partager. Maintenant, c'est le genre de truc qui peut difficilement être 100% automatisé, surtout si tu veux être compatible avec tous les mutualisés pourris de la terre *Regard appuyé à Free*.

Sinon en fait, JerryWham a bien expliqué ce que j'essayais d'évoquer ce midi sur le fait de sortir le fichier .htpasswd de la racine web. Du coup, bah rien à redire.

Concernant le "dirname(__FILE__)":
"Ca marche par accident alors j'y touche plus" ;)

Je pense au contraire qu'il faut évoluer avec son langage. A utiliser la constante __DIR__ tu économises un appel de fonction : performance amélioré (sortez vos benchmarks) et surtout 9 caractères en moins !
Si ca ce n'est pas une raison suffisante de l'adopter...

Attention, je ne dis pas pour autant que le moindre bout de script PHP doit être full objet, avec injection de dépendances et tout le toutim, mais juste que quand on a des nouveautés qui permettent de gagner en lisibilité, autant les chérir dès que possible. Bref, quand c'est court, c'est mieux.

Et c'est sur cette magnifique phrase à double sens sexuel qui ravira les moins gâtés d'entre nous, que je vous souhaite une bonne soirée.

 
10  Bronco le

Re Silvus ! Pas de soucis, rassure-toi
Du coup, c'est sympa de la refaire !

J'aime bien l'ajout "par accident" à ma phrase du début c'est même pas loin d'être ça parfois

J'adopte donc __DIR__ officiellement, hinhinhin...

En ce qui concerne les blagues de cul, je suis plus spécialiste de celles qui portent sur l'hypertrophie génitale

 
11  ArthurHoaro le

Les .htaccess c'est caca.

(Oui, je poste souvent des commentaires constructifs. Merci pour le partage en tout cas, ça peut servir à l'occasion.)

 
12  JeromeJ le

Bon, cette fois j'ai essayé très fort :p

Donc je vais au moins faire dans l'original, puis j'arrêterais de t'ennuyer avec ça que je crois savoir que tu n'aimes pas ça ;) So this is the last one :D

http://cdn.memegenerator.net/instances/500x/43543466.jpg

 
13  jerrywham le

@Silvus et Bronco : "Quand c'est court c'est mieux !", ça se défend mais ça dépend.

Quoi qu'il en soit, comme je dis toujours, "Il vaut mieux l'avoir petite et fringante que grosse et feignante !".

Sur ces belles paroles que je vous laisse méditer, je vous souhaite une bonne journée.

 
14  jerrywham le

PS / HS : y aurait-y pas un lien pour savoir quelle syntaxe utiliser pour afficher les smileys de ton site ? C'est relou de regarder le code source à la recherche de la bonne formule.

 
15  Bronco le

En effet, il faut que je fasse ça... En fait il faudrait que je reprenne carrément la maquette:
1-les gens bien: ben il en manque plein que j'ai eu le plaisir de rencontrer depuis la création du site
2- la mise à jour de pluxml
3- liste des smileys prévus et ajout d'images utilisables (memes utiles *trollface*)
4- reprise de certaines parties de codes tenant de la bidouille rapide en mode FixItLater...
5- nouvelle gestion des avatars (génération par défaut + utilisation de gravatar?!)

etc

Ce sera un travail de longue haleine
je vais faire un post en attendant
(vertuchou, me voici en nouveau en mode FixItLater, Damn !)

 
16  jerrywham le

Gravatar, ça pue, c'est moisi, ça colle aux basques...

 
17  Bronco le

oui, pis un peu intrusif... Je préfère bricoler un générateur d'avatar...

 
18  Idleman le

Honnêtement le htaccess m'a l'air d'être sur le déclin, le simple fait qu'apache seul semble utiliser ce format de fichier me pousserait a me tourner vers des solutions de verrouillage coté logiciel et non coté serveur :-p.

Merci tout de même pour ce ptit script, en tant qu'handicapé sévère du .htaccess (sérieusement c'est une syntaxe de nazi il n'y a pas d'autres mots...) ça risque fort de me filer un coup de main un de ces quatres :)

ps: rien à voir mais j'adore tes émoticons, je peux te les piquer ?

 
19  Bronco le

C'est un peu dans ce sens que j'ai fait ça: un genre d'exercice... mais j'utilise plutôt auto_restrict... (que je dois paufiner d'ailleurs)
Pour les emotes, te gène pas, c'est cadeau
Je dois encore avoir les versions d'origine en png quelque part ;)

 
20  idleman le

Si tu les as en png ou psd je ne suis pas contre :D, tu peux me les balancer sur ma boite ? :D

Faut vraiment que tu mette en place un système de notification pour les commentaires à chaques fois je les passe à la trappe ! :D

 

Fil RSS des commentaires de cet article

✍ Écrire un commentaire

Quelle est la quatrième lettre du mot kgjlle ?