Sécuriser un dossier créer avec mkdir

TheBleedz -  
avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
Je vous explique. Chaque membres inscris aura la possibilité de créer par la suite ( Après l'inscription ) un dossier portant comme nom le ID du membre qui la créer ! Jusque la pas très compliquer a réaliser ! Mais voila maintenant comment puis-je faire pour sécuriser chaque dossier créer par l'utilisateur pour que lui seul il est accès !
Plus d'information sur le dossier :
Ce dossier est créer avec la commande mkdir ( code plus bas ). Le dossier servira juste a stocker les images que l'utilisateur vas transférer a l'intérieure donc il ne doit pas avoir accès a ce dossier en tapant juste "nomdusite/nomdudossier". J'avais l'idée de le protéger par un .htaccess mais je sais pas comment m'y prendre ! Pour ca je me retourne vers vous pour lachez toute vos idées !!! Comme une petite boite a idée :D

Voici le code de la page qui va créer un dossier avec l'id du membre ( Je l'ai ultra simplifié pour que vous avez plus facile )

<body>
<form method="post" action="mkdir.php">
<input type="submit" name="ok"/>
</form>
<?php 
if(isset($_POST['ok']))
{
	if(@mkdir ("A/a",0777,true))
    {
    echo"cela fonctionne";
    } 
	else 
	{
    echo"cela ne fonctionne pas";
    }  
}
?>
</body> 


Merci d'avance et bonne soirée et désoler si je viens souvent demander de l'aide !

1 réponse

  1. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    Salut,

    Tu peux bloquer l'accès via HTTP grâce à un .htaccess contenant seulement « deny from all ».
    Ce .htaccess doit se placer dans le dossier contenant tous les dossiers des membres.

    Par exemple :
    /
    - images/
    - - private/
    - - - .htaccess  <--- Ici le « deny from all »
    - - - membre_1/
    - - - - *
    - - - membre_2/
    - - - - *
    - - - membre_3/
    - - - - *
    - - image_publique.png
    - - image_publique2.jpg
    - index.php
    - page.php


    De cette manière, il ne sera pas possible d'accéder aux images via http://example.com/images/private/membre_1/fichier.png

    L'accès est seulement bloqué par HTTP !
    Tu peux donc toujours accéder aux fichiers par PHP et les afficher au navigateur, le PHP te permettra de contrôler l'accès.

    Par exemple :
    <?php
    // Fichier: image.php
    // Ex. d'appel: example.com/image.php?file=nom.png
    
    session_start();
    
    if(isset($_SESSION['user_id']) && isset($_GET['file'])) {
        // Si le membre est connecté et qu'un fichier est indiqué
    
        // Définir le dossier dans une variable
        $path = 'images/private/membre_' . $_SESSION['user_id'] . '/';
    
        // Sécurité pour éviter de remonter l'arborescence avec « .. »
        $fileinfos = pathinfo($_GET['file']);
        $filename = $fileinfos['basename'];
    
        if(file_exists($path.$filename)) {
            header('Content-type: image/'.$fileinfos['extension']);
            readfile($path.$filename);
        } else {
            header('HTTP/1.1 404 Not Found');
            include('404-notfound.html');
        }
    
    } else {
        header('HTTP/1.1 401 Unauthorized');
        include('401-unauthorized.html');
    }
    0