|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre du Club
![]() |
J'ai pas encore fait le tour de toutes les possibilités, mais pour un futur site d'e-commerce, j'aurais besoin d'empécher l'affichage des images de certains dossiers lorsqu'on saisi directement l'url de celles-ci. En gros, il y a des visuels soumis par des graphistes, et certains sont retenus pour la vente. A partir de l'url d'un de ces visuels en vente, on peut facilement trouver l'url d'autres visuels normalement inaccessible. Le vendeur souhaiterait évidemment que la concurrence ne puisse pas accéder aux visuels qui n'ont pas encore été mis en vente pour éviter tout vol.
Il y a plusieurs solutions : - La protection par .htaccess basée sur le referer, protection déjà en place mais qui n'est pas activée lorsqu'il n'y a pas de referer. Ca fonctionnerait en refusant aussi l'accès quand il n'y a pas de referer, mais pas mal d'outils masquent ce référer, donc pas bon Code :
Code :
- Pour essayer d'économiser toute requête sql, on peut envisager la solution précédente en ajoutant par exemple le timestamp actuel en paramêtre, le script ne retournant l'image que si ce timestamp n'est pas dépassé de plus de X secondes. Mais il faut que X soit suffisamment grand pour que ca couvre l'écart entre la génération de la page et le début du chargement de la dernière image dans le cas ou ca rame. Et ca n'empeche en rien l'affichage depuis l'url si le "concurrent" est assez futé pour saisir à la main un bon timestamp dans l'url. Finalement : En clair, je me demande s'il y a une solution permettant d'éviter toute requête. Plutot que faire des vérifications sur les droits, la solution recherchée serait plutot de déterminer si l'image est appelée directement depuis la barre d'adresse ou par l'intermédiaire d'une balise <img>, mais sauf erreur de ma part (à 6h du mat j'ai plus toute ma tête :p), les navigateurs récupèrent l'image de la même facon dans les 2 cas, sans différence d'header, et donc sans moyen de détecter ca de facon générique. Si quelqu'un a de quoi confirmer ou infirmer cela, le temps que je fasse quelques recherches de plus, qu'il n'hésite pas à user son clavier dans le coin PS : Je poste dans la rubrique PHP parce que la plupart des solutions possibles, et celle qui sera probablement retenue, font fortement appel à PHP, meme si une éventuelle (mais peu probable) solution permettant de déterminer si l'appel se fait par la balise <img> ne fera probablement pas appel directement à php |
||||
|
|
00
|
|
|
#2 |
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2006 Messages : 15 ![]() |
Question intéressante, dont je ne détiens pas la réponse mais je suis aussi assez intéressé. Je me serai contenté de l'.htaccess qui bloquerait quand même une majorité d'utilisateurs (je suppose que tu fais références à des proxys voire firewalls pour ce qui est de fausser les referers).
|
|
|
00
|
|
|
#3 |
|
Membre du Club
![]() |
Oui par exemple.
Pour l'instant, je vais surement partir sur la solution des urls vers les images renvoyées via url-rewiting vers le script php, qui va effectuer une requête pour vérifier si on affiche ou non le visuel, en mettant cette requête en cache. Avec possibilité de le désactiver depuis l'interface admin du site. Je pense qu'une requête en cache + le retour de l'image via readfile (avec gestion du cache du navigateur, donc pas envoi systématique) ne devrait pas être eccessivement lourd sur le frontend ou il n'y aura en général que 1 à 8 visuels maxi. L'inconvénient, c'est que cette solution prend en compte tous les appels depuis la balise <img>, et donc risque d'être un peu lourde dans les pages listant pas mal de visuels dans l'interface admin (sans compter la création multiple de fichiers cache sql dans le dossier de cache). Mais il n'y a pas vraiment de solution pour autoriser les balises <img> dans l'interface admin tout en interdisant l'accès direct (sinon ca répondrait à la question principale du post, et la solution de la redirection vers un script php n'aurait plus lieu d'être) |
|
|
00
|
|
|
#4 | ||
|
Expert Confirmé Sénior
![]() Inscription : septembre 2004 Messages : 5 421 ![]() |
Pourquoi ne sortirais-tu pas tes images de l'espace web, ainsi elle ne sont pas visible par apache (donc pas visible par aucun navigateur web), et tu ecris un script php qui 1) vérifie les droits 2) affiche l'image :
Code :
|
||
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() |
Qu'il y ait un acces restraint par htaccess ou que les images soient en dehors de l'espace web ne change rien au problème, qui réside plus dans la fiabilisation et l'allègement et la vérification du droit d'affichage.
Je vais voir ce que ca donne à l'usage en mettant en session un tableau avec pour clés tous les visuels affichés sur la page (et sur toutes les pages de la session, pour qu'il n'y ait pas de merde lors du chargement de 2 pages en même temps). Le script php vers lequel est redirigé l'appel d'une image se contentera de vérifier l'existance de l'id de l'image dans les clés du tableau. Pour fiabiliser le bon suivi de la session en cas de refus des cookies par exemple, je l'ajoute dans les liens des images, genre img/items/item_5.jpg?PHPSESSID=ba91ef2657da4e9bef46aac4a268b0d8 Vu le relatif faible nombre de visuels sur la plupart des pages (quoique sur certains ca peut monter), ca devrait ête assez léger, et de toute facon désactivable si ca devient trop lourd avec le temps. |
|
|
00
|
|
|
#6 | |
|
Expert Confirmé Sénior
![]() Inscription : septembre 2004 Messages : 5 421 ![]() |
Citation:
|
|
|
|
00
|
|
|
#7 |
|
Membre du Club
![]() |
D'une part l'.htaccess ne bougera pas, d'autre part il faut pouvoir désactiver cette sécurisation dans le cas ou l'affichage finirait par etre trop lourd par readfile (ou que le cache du navigateur serait finalement mal géré)
|
|
|
00
|
|
|
#8 |
|
Membre émérite
![]() Inscription : mai 2004 Messages : 708 ![]() |
L'arme absolue: mod_security pour Apache. Toutes les requêtes http sont filtrées à l'entrée. Et pas seulement l'uri, mais également son contenu (le body d'un POST par exemple).
Ce filtrage se passe avant que le serveur http ne "serve" les requêtes. Les règles de filtrage et les actions subséquentes (allow, deny, status, redirect, log...) fonctionnent un peu comme iptables. Il est aussi possible de filtrer les sorties! Une sorte de router/firewall pour Apache. Tu devrais certainement trouver de quoi faire! http://www.modsecurity.org/ |
|
|
00
|
|
|
#9 |
|
Membre du Club
![]() |
Hum, ca fait un peu extreme pour ca, ca consomme des ressources et necessite un peu de config pour que ca ne foute pas le boxon ailleurs. Puis je ne vois pas trop non plus comment il pourrait faire la différence entre un appel direct par l'url ou depuis une balise <img>
|
|
|
00
|
|
|
#10 | |
|
Expert Confirmé Sénior
![]() Inscription : septembre 2004 Messages : 5 421 ![]() |
Citation:
![]() tu veux bloquer les images si on tape leur url dans le navigateur ? Et si l'utilisateur fait un document html et met l'url de ton image dans une balise img ? |
|
|
|
00
|
|
|
#11 |
|
Membre du Club
![]() |
Ca c'est déja bloqué par la protection des images sur le referer. Apres la solution de la session que j'ai testée marche bien, mais il y a un problème avec le cache. Puis bon en pratique c'est assez lourd et ajouter un id aléatoire dans le nom des images sera plus simple si je dois mettre en place une telle protection
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com