Securité des images sur un site

a marqué ce sujet comme résolu.

Bonsoir chers amis j’ai petite préoccupation dans mon site web je permet a l’utilisateur d’uploader une image par post et le post d’un utilisateur peut ne pas être vue pas certains autres utilisateurs.

Le problème c’est que si un utilisateur sais comment je procède pour nommer mes images il est capable de voir des images dont-il n’a pas le droit de voir.

Pour résoudre ce problème après avoir défini le nom de mon image je le hashe en utilisant le SHA1 est-ce une bonne manière de faire et quels sont les problèmes qui peuvent survenir.

Merci pour vos différentes réponses.

Tu as peur que quelqu’un retrouve accède à l’image de quelqu’un d’autre ?

Il n’y pas 36 solutions. Le nom des images doit être aléatoire.

Le hash SHA1 n’a pas beaucoup d’intéret, ce n’est pas tout de suite évident que image-2 suit image-3 si tu hashes mais ça peut finalement être détecté, dès que l’attaquant l’a compris, la sécurité tombe. C’est une sécurité par l’obscurité et donc une non-sécurité.

La plus simple est de tirer un nom totalement aléatoire. Prend par exemple au moins 4 lettres aléatoires, ça te forme déjà un paquet de noms possibles. Tu as alors peu de risque de tomber 2 fois sur le même nom. Si jamais ça arrive, alors « ajoute/change une lettre aléatoirement » jusqu’à ce que tu tombes sur un nom disponible. Ce n’est pas déterministe mais la probabilité que ça pose problème est de l’ordre de 1 sur plusieurs milliard de milliard alors bon…

L’alphabet à utiliser est le basique alpha-digital: a-zA-Z0–9.

Biensûr, utiliser un petit nom de caractères, pose le problème que l’utilisateur peut bruteforcé l’accès aux images. En testant toutes les noms possibles. La solution simple pour palier à ça est de prendre plus de caractères que 4. Commence à 7 ou 8 par exemple et la méthode demande déjà trop de ressources de la part de l’attaquant (et aussi pour ton serveur d’ailleurs). La méthode complexe mais intéressante est de limité le nombre d’image auquelle un utilisateur peut accéder en 1minute. Par exemple, l’utilisateur n’a pas le droit de charger plus de 20 images par minutes.

Avec une telle restition, il devient impossible de brute-forcer l’accès aux images même si leur nom ne fait que 4 caractères. Déjà, 20 requètes pas secondes, il faut que ton serveurs tienne la charge (ça ne devrait pas poser problème pour des requètes aussi simples).

Remarque dans tous les cas, il est toujours intéressant de limiter le nombre de requètes provenant d’une même source.

+0 -1

J’aurai tendance à stocker les images protégées dans un dossier dédié, lequel serait protégé par un fichier .htaccess dont personne (sauf PHP lui-même) n’aurait l’accès. Lorsqu’un utilisateur a besoin d’une image, il doit passer par une page (ex : download.php) sur laquelle il doit d’abord se connecter avant d’accéder à l’image.

Pour interdire tout accès au dossier protégé, j’utilisais ce code dans le fichier .htaccess :

deny from all

Cette solution a l’avantage d’être insensible au risque de force brute pour trouver "par hasard" les liens des images. Par contre, toute la sécurité repose donc sur le système de connexion de l’utilisateur.

+2 -0

Ah ok donc si je comprends bien il suffit de mettre un fichier .htaccess avec la valeur deny from all dans les répertoires que je veux protéger et cela empêcherai une personne de taper par exemple

repertoire_image/nom_image.jpg dans son navigateur pour voir l’image mais repertoire_image/nom_image.jpg dans une page de mon site fonctionnerait bien. Est-ce ça? Merci

J’ai proceder ainsi:

<Files *.jpg>

Require all denied

</Files>

Mais j’arrive toujours a accéder aux images avec l’extension .jpg en tapant:

www.nom_site.com/uploads/image.jpg

La manière de procéder est-elle mauvaise?

Merci pour tous vos réponses.

+0 -0

C’est normal, les images sont dans un dossier protégé. Seul PHP (ou le langage serveur que tu utilises) y a accès.

Il faut maintenant créer un script en PHP qui ira chercher les images à ta place et les affiches à l’écran après avoir vérifié que le bon utilisateur est bien connecté.

Non mais il faut soulever le problème de fond.

La page qui affiche les images, est-elle un espace réservé aux membres ? Comme par exemple un fils de discution ou un forum privé ? Tu as la liste des membres qui participent à cette discution ? Si oui, alors tu as là bonne méthode. Il faut effectivement gérer ça au niveau du langage serveur afin de lier les droits de lecture de l’image (la liste des membres participantà la discution) à l’authentification (le système d’authentification de ton site).

Si non, si tu n’es pas capable d’avoir une liste de membres. Alors ce n’est pas la bonne solution.

le post d’un utilisateur peut ne pas être vue pas certains autres utilisateurs.

Si tu es capables de faire la liste des membres qui peuvent (ou ne peuvent pas) voir le post alors ça marche aussi, il faut effectivement continuer ton script en PHP.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte