Aller au contenu

Sécuriser un site php


Sujets conseillés

Posté

Bonjour à tous,

je réfléchis à comment aborder la question de sécurité pour un site type catalogue en ligne qui propose des ressources en téléchargement pour certains membres.

D'un côté, j'ai évidemment des questions concernant l'identification de ces membres :

- le système de login / mots de passe en BDD est-il fiable et suffisant ? (genre login normal et mot de passe en md5)

- pour l'identification des membres en questions, si on utilise un formulaire d'identification, vaut-il mieux utiliser une variable de session en faisant appel à une variable du type $_SESSION['id'] et tester si elle existe / contient un identifiant valide... ? ou faut-il utiliser une autre technique plus fiable ?

et la question de la protection des ressources :

- pour les liens vers les ressources, imaginons qu'une fois connectés, les membres voient les liens d'accès aux ressources qui sont stockées dans un répertoire "telecharger/nomdudoc.zip" par exemple, tandis que les non membres ou les non connectés ne voient pas ces liens :

j'ai limité l'accès à ce répertoire via mon htaccess (si un non membre ou non connecté connait l'url du document et tente de l'afficher via un navigateur en le tapant directement dans l'url, son accès est refusé) mais est-ce réellement suffisant ... ?

J'ai entendu parlé de "répertoires temporaires", qui offriraient des solutions plus intéressantes :

d'après ce que j'ai pu comprendre de l'idée, à la connection du membre, on lui créerait un répertoire temporaire, juste le temps d'une session, et il y trouverait les ressources qui elles seraient stockées ailleurs sur le serveur, dans un répertoire que seul l'administrateur connait... lequel répertoire temporaire serait détruit en fin de session, et donc les ressources à nouveau à l'abri....

Celà me pose question :

- si mes ressources sont légères et peu nombreuses, je peux à la connection les copier et les placer dans le répertoire temporaire... mais si elles sont très lourdes (genre 10Mo chacune) et nombreuses.... ça sent l'usine à gaz super gourmande en ressources à ne pas utiliser....

- si le problème de ressources gourmandes pouvait être contourné (j'attends de vos avis sur la question :whistling: ), comment savoir quand détruire le répertoire temporaire ?

- question subsidiare : et si on veut pouvoir rappeler au membre d'une session sur l'autre ce qu'il a fait en session précédente ... il faut passer par une gestion en base qui en garde des traces ?

Evidemment, si chaque utilisateur se déconnecte proprement, c'est facile... mais s'il ne le fait pas ... ? (Ca me rappèle que j'avais vu un script qui gérait la durée de vie des sessions et qui faisait qu'au bout de 3 ou 5 minutes d'inactivité, elle était détruite... c'est peut-être à approfondir ???)

Bon voilà, vous aurez compris qu'il s'agit pour moi d'une réflexion de fond, qui pourrait être applicable à tout site nécessitant une identification / sécurisation de données, le partage d'expériences est bienvenu :P

Posté

Je pense qu'un script de téléchargement serait suffisant pour gérer ça :

En gros :

- Un internaute loggué clique sur un lien du type "telecharger.php?id=456"

- Ce script vérifie la validité de la personne (login/mdp), et va chercher en base le chemin du fichier n° 456

- Une fois le véritable chemin du fichier trouvé, il lance le téléchargement automatiquement

Par exemple (juste pour le téléchargement) :

<?php
header('Content-type: application/zip');
header('Content-Disposition: attachment; filename="telechargement.zip"');
readfile('chemin/vers/le/fichier/original.zip');
?>

Posté

Bonjour,

en ce qui concerne les doosiers de session temporaire, je ne pense pas qu'une copie des fichiers soit nécessaire, je pense que sous un système unix/linux, des liens symboliques doivent faire l'affaire...

En ce qui concerne la solution de captain_torche, elle devrait être fiable, si tu protèges en plus l'accès au dossier via htaccess et que tu choisi un nom de repertoire difficle à trouver (genre éviter /telechargement, mais plutot choisir un dossier dont tu génères le nom via un md5, ca te donnera un nom très difficle à trouver pour un utilisateur).

Posté

Avec un .htaccess contenant juste un "deny from all", ça devrait fonctionner.

Apache n'est pas ciblé par la restriction, par contre, il sera impossible d'accéder au contenu du répertoire par http.

Posté

Bonsoir,

Je vous remercie de vos réponses...

Effectivement appeler un élément au téléchargement par son id, à la seule condition d'être bien identifié peut suffire.

Me reste encore à déterminer quelle est la meilleure solution de gestion des identifiants...

en ce qui concerne les doosiers de session temporaire, je ne pense pas qu'une copie des fichiers soit nécessaire, je pense que sous un système unix/linux, des liens symboliques doivent faire l'affaire...
Ca m'intéresse ça, mais je ne vois absolument pas comment une telle chose se fait, peux-tu me donner quelques pistes pour que je m'instruise sur la question ?

Merci ^^

Posté

En ce qui concerne les liens symboliques, il s'agit simplement d'un lien qui pointe vers un fichier (si tu as un systeme unix/linux sous la main, tu peux faire un "man ln" dans la console ;-))

L'idée c'est de créer des liens vers tes fichiers dans tes dossiers temporaires plutot que de les copier (gain de place + gain de temps...)

C'est juste une idée, je n'ai jamais mis de telle solution en pratique pour un serveur...

  • 2 semaines plus tard...

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...