Protection de répertoire

Fermé
heliconius Messages postés 545 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 23 juin 2023 - 24 juin 2018 à 00:21
astuces72 Messages postés 7722 Date d'inscription vendredi 15 janvier 2010 Statut Membre Dernière intervention 17 avril 2024 - 25 juin 2018 à 08:50
Bonsoir,

Dans un site web et en matière de protection de répertoire, je ne connais que la protection classique effectuée grâce aux fichier .htaccess et .htpasswd

- L'intérêt de cette pratique est de ne pas devoir retaper le mot de passe d'accès à la partie protégée tant qu'on n'a pas fermé son navigateur. Et ce, même si l'on avait déjà quitté le site.

- L'inconvénient est de devoir mettre à jour le fichier .htpasswd pour chaque utilisateur nouvellement autorisé. Ce n'est pas lourd à gérer quand il y a peu d'utilisateurs (demi-douzaine ou moins) mais devient plus problématique lorsque les utilisateurs sont beaucoup plus nombreux et qu'ils peuvent changer fréquemment.

Je souhaiterais plutôt utiliser une base de données (MySQL) pour enregistrer les nouveaux utilisateurs autorisés. L'enregistrement et la modification des mots de passe ne me pose pas de problème de codage. C'est l'utilisation pratique, le principe qui me pose problème.

Supposons que la partie protégée du site soit située à l'URL http://www.monsite.com/membres

Avec la protection classique, si je veux accéder à la page par défaut (page index.html ou index.php) ou à l'une quelconque des pages de ce répertoire ou de ses éventuels sous-répertoires, le mot de passe sera demandé. Et sans ces fichiers (.htpasswd), je ne vois pas comment je peux faire.

Je peux mettre un dispositif "garde barrière" sur la page index (http://www.monsite.com/membres/index.php) qui demandera un mot de passe mais si j'évite cette page en tapant directement le nom d'une page que je sais exister (par exemple: http://www.monsite.com/membres/liste.php), j'évite le garde-chiourme (index.php) et je passe quand même ! Pas bon. Par ailleurs, si je quitte le site (SANS QUITTER le navigateur) et que je reviens sur cette page par défaut (http://www.monsite.com/membres/index.php), le mot de passe me sera demandé à nouveau. Pas bon.

J'ai bien pensé à l'utilisation de cookies de session mais par principe, je me refuse à placer des cookies sur les machines de mes visiteurs.

Ma question est donc : comment assurer la protections des toutes les pages à partir d'un sous-répertoire (je ne demande pas le code mais la philosophie à utiliser) en enregistrant les mots de passe des utilisateurs dans une base de données, mais sans utiliser de cookies et tout en ayant la même sécurité et la même souplesse qu'avec des fichiers .htaccess et .htpasswd ?

Si quelqu'un a une idée de méthode, je le remercie par avance.



2 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
24 juin 2018 à 10:40
Bonjour,

Dans tous les cas il te faut un ID de session pour pouvoir naviguer d'une page à une autre de manière sécurisée.

Un cookie c'est juste un type particulier d'en-tête dans ta requête HTML, tu peux très bien contourner l'utilisation d'un cookie en mettant ton ID de session directement dans un autre header qui n'est pas un cookie. Mais cela signifie que tu devras générer ta page HTML en y incluant l'ID de session dans chacun de tes formulaires voire dans les params du GET.

Exemple : http://www.monsite.com/membres?session=123456789abcdef

Attention, en terme de sécurité c'est mauvais, car si quelqu'un intercepte l'URL il pourra utiliser l'ID de session à son propre compte. C'est pour ça qu'il vaut mieux privilégier de mettre l'ID dans les header sd'un POST (ce qui ne changera pas grand chose pour un site en http mais serait protégé en https).

Mais bon, il ne faut pas mettre tout les cookies dans le même panier... ici ce serait dans l'intérêt de l'utilisateur d'en avoir un ! Car tu vas galérer à sécuriser ton site en contournant les standards du web.
1
astuces72 Messages postés 7722 Date d'inscription vendredi 15 janvier 2010 Statut Membre Dernière intervention 17 avril 2024 1 637
25 juin 2018 à 08:50
hello

tu dis:
...en tapant directement le nom d'une page que je sais exister (par exemple: http://www.monsite.com/membres/liste.php), j'évite le garde-chiourme (index.php) et je passe quand même !

Bien sur qu'il faut tester si l'utilisateur à le droit d'être ici.
Comme le note KX, il te faut un ID en Session, et tu tests en début de chaque page, si pas bon, redirection vers la page de connexion ou autre.
Ton ID de Session peut être un $code que tu génères à partir de l'ID visiteur et d'un nombre aléatoire.

Tu peux très bien aussi au moment de la connexion générer ce $code et l'enregistrer dans ta BDD($codebdd), et sur chaque page, tu contrôles que $code = $codebdd, mais je ne sais pas si c'est plus sécurisé qu'un simple contrôle de $code en Session sans passer par la bdd, ça fait un accès à la bdd supplémentairement.
0