Htaccess débloqué par php

Résolu
eti-N Messages postés 36 Date d'inscription   Statut Membre Dernière intervention   -  
eti-N Messages postés 36 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
J'ai écrit une page php qui doit protéger des photos privées et y donner accès à ceux qui insèrent le bon mot de passe.
le fonctionnement de la page est plutôt simple:
la page demande un mot de passe
si le mot de passe est faux, la page redemande le mot de passe
si le mot de passe est correct, la page active une variable superglobale de session ($_SESSION['bidule']) et se redirige sur elle même.
en détectant que la session est activée, la page ne demande plus le mot de passe mais affiche les photos.

Le problème, c'est que n'importe qui pourvu du mot de passe peut accéder aux photos et prélever l'URL de l'une d'entre elles, par exemple, ce qui permet d'y accéder sans mot de passe (je n'ai pas encore mis de fichier .htaccess).
je sais qu'il est possible de demander un login via htaccess mais ce n'est pas exactement ce que je voudrais faire.
Je voudrais pouvoir donner les droit htaccess (activer les droit comme si htaccess avait lui-même demandé le login), mais depuis ma page php.
1ere question)
est-ce possible?
2eme question)
si oui, comment?
Merci d'avance de votre aide


A voir également:

3 réponses

Pitet Messages postés 2826 Date d'inscription   Statut Membre Dernière intervention   527
 
Salut,

Une solution possible est d'interdire l'accès direct aux images via leurs URLs et de passer par un script php pour y accéder et les afficher.

Pour interdire l'accès publique (via les URLs), tu peux ajouter un fichier .htaccess dans le dossier où sont stocké tes images avec le contenu suivant :

order deny,allow
deny from all


Les fichiers images contenus dans ce dossier ne sont donc plus accessible depuis l'extérieur (via l'URL) mais PHP peut toujours y accéder.
Tu peux donc créer un nouveau fichier php (à la racine de ton site où dans un dossier accessible depuis l'extérieur) qui ira lire et afficher l'image passé en paramètre seulement si l'utilisateur est connecté.
Voici une ébauche de script :
<?php
// pour l'exemple ce script se nomme lireImage.php et est situé à la racine du site
if (!isset($_SESSION['bidule'])) {
    exit(); // on arrête le script si l'utilisateur n'est pas connecté
}

// chemin vers l'image demandée (en supposant que les images soit enregistrées dans le dossier "images")
$fichierImage = 'images/' . $_GET['file'];

if (file_exists($fichierImage)) {
    header('Content-type: image/jpeg'); // on indique au navigateur qu'on retourne un fichier .jpg (à modifier selon l'extension des images)
    readfile($fichierImage); // on retourne l'image
    exit();
}


Il te suffit ensuite de remplacer dans ton code HTML la source des images comme ceci :
<!-- Avant -->
<img src="images/photo1.jpg">

<!-- Après -->
<img src="lireImage.php?file=photo1.jpg">


Ainsi tes images ne sont accessibles/affichées que si l'utilisateur est connecté dans la session PHP.

Bonne journée
4
VlkPr3s Messages postés 235 Date d'inscription   Statut Membre Dernière intervention   130
 
Bonjour, si tu déclares ta variable session seulement quand l'utilisateur est log tu n'auras plus de problème.

Si un utilisateur non connecté veut accéder à une page en tapant dans l'url et bien il sera renvoyé vers la page de connexion ...

Comment fait on cela ?

session_start();
if (!isset(variable session)
{
header('Location: connexion.php');
exit;
}
0
eti-N Messages postés 36 Date d'inscription   Statut Membre Dernière intervention   14
 
Oui, la page se redirigera vers la connexion, mais il est aussi possible de relever l'URL d'une seule photo, (clic droit > copier l'URL de l'image, dans Chrome) par exemple, permettant d'y accéder sans connexion, et d'accéder à la photo séparément, ce que je souhaite éviter en protégeant le dossier conteneur par un htaccess
0
VlkPr3s Messages postés 235 Date d'inscription   Statut Membre Dernière intervention   130 > eti-N Messages postés 36 Date d'inscription   Statut Membre Dernière intervention  
 
Tu empêches tout clique droit sur l'url ça doit bien être faisable. Comme pour les fichiers pour empêcher leur lecture ou leur téléchargement.
0
Xavierdu34 Messages postés 216 Date d'inscription   Statut Membre Dernière intervention   21
 
et comment tu empêche de visionner la source et de copier le lien ... non ce n'est pas viable comme solution ...

La soluce de pitet est la meilleure soluce je pense, sinon tu peux le faire par blocage ip, tu rajoute une fonction qui détermine l'ip du visiteur, si il rentre le bon mot de passe, tu ajoute son ip à un array, et tu autorise l'affichage de la page si et seulement si, l'adresse ip de l'utilisateur est dans l'array ..

Tu ajoute un index datetime dans ton array pour permettre l'accès pendant un certain temps, et quand le temps est écoulé il faut re rentrer le mot de passe pour accéder de nouveau à la page.
0
VlkPr3s Messages postés 235 Date d'inscription   Statut Membre Dernière intervention   130 > Xavierdu34 Messages postés 216 Date d'inscription   Statut Membre Dernière intervention  
 
Je n'ai jamais dis que ma solution était la bonne surtout que j'ai commenté avant le mec ;) et ce n'est pas moi qui dois faire le travail ;) ! je donne des idées après on peut ne pas toujours dire des choses 100% optimale ;) !
0
eti-N Messages postés 36 Date d'inscription   Statut Membre Dernière intervention   14 > VlkPr3s Messages postés 235 Date d'inscription   Statut Membre Dernière intervention  
 
n'existe-til pas ne solution avec une variable superglobale comme $_SERVER['authuser'], ou quelque chose comme ça, par exemple ?
0
eti-N Messages postés 36 Date d'inscription   Statut Membre Dernière intervention   14
 
mais je crois qu'en fin de compte, la réponse de Pitet fera largement l'affaire
merci à tous
0