Gestion des fichiers, site web, et droits

SuperCed

Membre expert
Club iGen
20 Juin 2001
1 347
72
45
superced.rb38.eu
Je dois faire un site web ou certaines personnes déposent des fichiers, et d'autres doivent les récupérer. Le problème de situe au niveau des droits, il faut que certaines personnes aient accès à certain fichiers, mais pas aux autres. Les personnes sont crées de façon dynamique.

En fait, les fournisseurs déposent des fichiers sur un serveur via une interface html, l'ensemble de ces fichiers constituent une grosse banque de données. Certains de ces fichiers peuvent être mis à disposition certaines personnes, mais pas tout le monde! Seulement ceux qui auront été définis comme ayant le droit d'y accéder.

Tout doit pouvoir se gérer de à travers une interface HTML.

Je connais un peu le PHP/mySQL pour avoir déjà réaliser quelques sites dynamiques. Je connais également Java (J2ME et J2SE mais pas bien J2EE). En PHP, je sais comment on upload des fichiers sur un serveur, comment on peut les récupérer ensuite. Cependant, quand on upload les fichiers en question, tout le monde est ensuite capable d'y accéder sur le serveur web. Je ne sais pas s'il est possible de modifier les droits UNIX sur les fichiers depuis du php. Surtout que lorsqu'on accède au site web sur le serveur Apache, il semble qu'on possède les droits de l'utilisateur "www". Est-ce comme ça que l'on peut gérer ces droits d'accès aux fichiers ou faut-il vraiment inclure les fichiers à l'intérieur de la base dans les enregitrements même. je sais que c'est possible.


D'autre part, il semble que l'on puisse gérer les droit sur la base, mais peut-on le faire sur des enregistrements précis? Il me semble que c'est la fonction GRANT en sql non?

Peut-on faire encore autrement? Ai-je intérêt à me tourner vers une autre technologie comme J2EE ou autre pour résoudre ce genre de problème?

Je n'ai pas de grosses contraintes de performances, il y a relativement peu de modification et de lecture en même temps. Le site doit être complètement sécurisé, et utilisable seulement par les utilisateurs définis comme fournisseur ou demandeur. Le système doit, dans la mesure du possible être multiplateforme, il me faut donc une techno qui fonctionne sur UNIX et Windows NT. Je ne sais pas si les droits sur les fichiers sont gérés de la même façon sur NT que sur UNIX, donc je ne sais pas si c'est bien d'agir directement sur les droits de fichiers. Si j'intègre les fichiers dans une base de données, aurais-je la possibilité de gérer les droits pour interdire certains enregistrement à certains et l'autoriser à d'autres? Pourquoi, la plupart du temps, les fichiers ne sont pas directement dans la BDD? Cela impose des contraintes? Fait chuter les perfs?

Quelle techno est la meilleure pour ce type de projet?

Existe-il des solutions directement explotables et adaptables me permettant de répondre à ce genre de problème?
 
  • J’aime
Réactions: molgow
SuperCed a dit:
D'autre part, il semble que l'on puisse gérer les droit sur la base, mais peut-on le faire sur des enregistrements précis? Il me semble que c'est la fonction GRANT en sql non?

Il me semble que les permissions c'est seulement sur les tables ou même les bases, mais en tout cas pas sur les tuples.

SuperCed a dit:
Peut-on faire encore autrement? Ai-je intérêt à me tourner vers une autre technologie comme J2EE ou autre pour résoudre ce genre de problème?

Je te déconseille J2EE... les JSP, Servlets, EJB c'est super, mais très lourd à mettre en oeuvre, et si en plus tu n'en as jamais fait, il te faudra d'abord apprendre à utiliser ça et c'est loin d'être facile. Bref, à réserver uniquement pour des très gros projets à mon avis.


Sinon, je peux difficilement te donner un bon conseil pour ton problème, je n'ai pas assez d'expérience dans le domaine.
 
Le plus simple à mes yeux c'est de protéger des dossiers par htaccess...
Un dossier par groupe d'utilisateur, ton script d'upload php determine le dossier de destination, et seuls les personnes appartenant au bon groupe possèdent le mot de passe htaccess...

C'est pas des plus élégants, mais très facile à mettre en place et très sûr (pour autant que les personnes ne divulguent pas les mots de passe).


Sinon, ce que tu veux est sans doute réalisable en php.
Tu envoie tous les fichiers dans un dossier protégé (par htaccess).
Et pour le téléchargement, tu ne fais pas un lien direct vers le fichier, mais un script php qui établit le lien avec la fonction readfile(). (ou autre, plusieurs peuvent remplir le rôle que tu cherches).

Tu peux trouver des infos plus détaillées là:
http://ch2.php.net/manual/fr/function.readfile.php
(jette un oeil aux commentaires en bas de page, c'est en anglais, mais je crois qu'il expliquent comment faire exactement ce que tu veux)
 
Ah et j'ai loupé la partie ou tu parlais d'intégrer les fichiers dans la BDD.

Je pense que s'il s'agit de petits fichiers, ça ne pose pas de problèmes (dans un champ de type blob). J'imagine que c'est pas idéal en termes de performances par contre, et puisqu'il faut de toutes manières des scripts php derrière pour assurer le lien base de donnée -> téléchargement, la méthode que je t'ai proposée ci-dessus me paraît plus sûre...
 
Le plus simple à mes yeux c'est de protéger des dossiers par htaccess

fait le directement dans la conf d'apache c'est beaucoup moins gourmand en ressources

----pour les droits chmod natif mais le possesseur reste le runner d'apache

ou shell_exec("chmod ......................

----si tu veux pouvoir faire plus coter serveur tu dois compiler apache avec suexec

----si tu veux utiliser posix exclus NT

jsp ou php meme combat aux niveaux des droits
le fichier appartiendra au runner du serveur jsp jigsaw,apache:tomcat,webobject
......

:zen:
 
J'ai regardé les .htaccess, et ça semble parfaitement convenir à mes besoins.

Maintenant, j'ai un autre petit problème. Il s'agit de générer un fichier zip à partir de plusieurs fichiers afin que l'utilisateur du site n'ai pas à cliquer 15000 fois pour tout télécharger.

A priori, j'ai trouvé une librairie dans phpMyAdmin qui génère des .zip (pas testé encore, mais elle est là). Est-ce que le fait que la compression zip mette du temps est génant? est-ce que ça ne va pas poser de problème si le timeout php arrive à échéance avant la génération du fichier zip? Je peux changer ce timer, mais est-ce vraiment sans danger?

Sinon, je ne veut pas utiliser la fonction exec ou shelle_exec car on est obligé de virer le safe mode de php et j'ai pas envie d'avoir des problèmes de sécurité.

Merci beaucoup à tous!