IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> Projet de site web avec gestion des fichiers, et des droits utilisateurs
Options
SuperCed
posté 30 Jun 2004, 15:39
Message #1


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 2 831
Inscrit : 19 Jul 2001
Lieu : Живим у Греноблу
Membre no 519



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?


[EDIT]Existe-il des solutions directement explotables et adaptables me permettant de répondre à ce genre de problème?

Ce message a été modifié par SuperCed - 30 Jun 2004, 15:42.


--------------------
Хајде Јано коло да играмо
iMac 27 mi 2010
Macbook air mi 2011
Mac Mini M1
Go to the top of the page
 
+Quote Post
schlum
posté 1 Jul 2004, 13:06
Message #2


Terminaltor
Moderating Machine
*****

Groupe : Admin
Messages : 24 449
Inscrit : 25 Oct 2002
Lieu : Jeumont (59)
Membre no 4 319



Peut-être gérer ça entièrement en MySQL / PHP avec des logins pass non ? unsure.gif
Sans se prendre la tête avec les droits de fichiers, gérer ça avec génération d'emplacements à noms aléatoires ...


--------------------
          I think therefore I Mac          
Go to the top of the page
 
+Quote Post
SuperCed
posté 1 Jul 2004, 16:34
Message #3


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 2 831
Inscrit : 19 Jul 2001
Lieu : Живим у Греноблу
Membre no 519



C'est ce que je pense de plus en plus. mon problème, c'est que je n'ai pas trouvé de façon de donner des droits sur certains enregistrements et pas d'autres. Ce qui a pour effet, de rendre accessible le contenu entier de la table.

Il faut donc que je crée une table par user, et que je duplique les fichiers en question pour chaque user.

Ya pas plus simple? Je veux simplement que certains users puissent accéder à certains enregistrements et pas d'autres.

Mais c'est clair que c'est plus simple que de mettre des droits sur des répertoires. Par contre, je suis obligé d'intégrer mes fichiers directement dans la base, il parait qsue c'est "moins bien", mais je n'ai pas trop compris pourquoi...


--------------------
Хајде Јано коло да играмо
iMac 27 mi 2010
Macbook air mi 2011
Mac Mini M1
Go to the top of the page
 
+Quote Post
schlum
posté 1 Jul 2004, 17:13
Message #4


Terminaltor
Moderating Machine
*****

Groupe : Admin
Messages : 24 449
Inscrit : 25 Oct 2002
Lieu : Jeumont (59)
Membre no 4 319



QUOTE (SuperCed @ 1 Jul 2004, 17:34)
C'est ce que je pense de plus en plus. mon problème, c'est que je n'ai pas trouvé de façon de donner des droits sur certains enregistrements et pas d'autres. Ce qui a pour effet, de rendre accessible le contenu entier de la table.

Il faut donc que je crée une table par user, et que je duplique les fichiers en question pour chaque user.

Ya pas plus simple? Je veux simplement que certains users puissent accéder à certains enregistrements et pas d'autres.

Mais c'est clair que c'est plus simple que de mettre des droits sur des répertoires. Par contre, je suis obligé d'intégrer mes fichiers directement dans la base, il parait qsue c'est "moins bien", mais je n'ai pas trop compris pourquoi...

Non, ce n'est pas ce à quoi je pensais ...
Une fois que quelqu'un uploade un fichier, tu crée un répertoire avec nom aléatoire (majuscules, minuscules et chiffres) d'une trentaine de caractères (du genre sJ7z87fS4D5f4D7f5p6a4ff4df75s) généré en PHP, t'y places le fichier, et tu rentres les infos de ce dossier (son id, son emplacement, son nom et autres infos) dans une table, et dans une autre table, tu gères les users qui ont le droit aux fichiers avec une interface web, et une page de login (avec les sessions) ...

Sinon, je crois qu'il y a un module pour gérer les accès .htaccess avec une base mysql, du genre libapache-mod-auth-mysql un truc comme ça, ça peut-être pas mal aussi ...


--------------------
          I think therefore I Mac          
Go to the top of the page
 
+Quote Post
PierreB
posté 1 Jul 2004, 17:46
Message #5


Macbidouilleur de vermeil !
****

Groupe : Membres
Messages : 1 022
Inscrit : 7 Oct 2002
Lieu : Cholet (49)
Membre no 4 005



oui je pense aussi que c'est le mieux de mettre toutes les autorisations dans une table avec par exemle comme nom de colonnes: propriétaire, dernière modif,... un peut comme les infos d'un fichier dans le finder.

Mais je pense qu'il n'est pas obligé de modifier le nom du fichier uploader (même si c'est plus facile) à condition d'avoir la gestion des dossiers pour éviter les fichiers en double.


--------------------
MacBook CD/ 160 Go/1 Go de RAM/ MacOS X.4.11/Lecteur Zip 250 Mo USB/ Epson Stylus C 70 et C 86 /Base airport Extreme
Go to the top of the page
 
+Quote Post
schlum
posté 1 Jul 2004, 17:53
Message #6


Terminaltor
Moderating Machine
*****

Groupe : Admin
Messages : 24 449
Inscrit : 25 Oct 2002
Lieu : Jeumont (59)
Membre no 4 319



QUOTE (PierreB @ 1 Jul 2004, 18:46)
Mais je pense qu'il n'est pas obligé de modifier le nom du fichier uploader (même si c'est plus facile) à condition d'avoir la gestion des dossiers pour éviter les fichiers en double.

Les mettre dans des dossiers à noms longs et aléatoires c'est pour que quelqu'un ne pirate pas les fichiers sur le serveur wink.gif


--------------------
          I think therefore I Mac          
Go to the top of the page
 
+Quote Post
SuperCed
posté 1 Jul 2004, 21:41
Message #7


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 2 831
Inscrit : 19 Jul 2001
Lieu : Живим у Греноблу
Membre no 519



Très bonne idée, j'y avais vaguement pensé mais je m'étais dit que ce n'était pas très propre. En réalité, c'est très propre, c'est comme un mot de passe, par contre il y a toujours le même problème. Il faudra dupliquer les fichiers si j'ai deux clients d'une part, d'autres part, les chemins d'accès (compliqués ou non) seront stockés dans une base et rien n'empêche tel utilisateur d'aller directement voir les les chemins d'accès des autres users puisque l'intégralité de la table sera consultable.

Donc j'ai bien l'impression que ça ne fait que déplacer le problème. La dernière solution résiderait à coder le nom du chemin d'accès avec la clef qui sert de password utilisateur, mais là, on parle alors de cryptage et ça complique tout. Cela dit, c'est peut-être le meilleur moyen, mais dans tous ces cas de figure, il faut dupliquer les fichiers en fonction du nombre d'utilisateurs.

Pour .htaccess, il y a un problème. Le serveur web ne sera pas forcement un apache. D'autre part, les utilisateurs sont créés dynamiquement.

C'est pas facile comme problème, mais si j'ai mal compris ce que tu voulais dire, n'hésite pas à reposter. Je suis un peu perdu là. Pour le moment, la seule technique que j'ai trouvée serait de créer une table pour chaque utilisateur. Dans cette table, il y aurait soit directement le fichier en question dans l'enregistrement même, soit le chemin d'accès codé comme tu l'as expliqué avant. D'ailleurs, cette dernière solution m'éviterait de dupliquer les fichiers puisque plusieurs users pouraient avoir le chemin dans leur table.

Par contre, ça nécessite bien une table par user. Je sais que c'est possible et je pense même savoir à peu près comment faire pour gérer les droits, mais est-ce propre? N'existe-il pas plus simple? Et finalement ma dernière question pour laquelle personne n'a encore répondu : est-ce vous pensez que PHP est vraiment bien adapté à ce genre de problème?

Merci pour vos participation à tous les deux, ça m'a vraiment fait avancer. Avec encore quelques avis, je pense que je vais finir par trouver un système qui tienne la route!

J'attends vos réponses avec impatience...


--------------------
Хајде Јано коло да играмо
iMac 27 mi 2010
Macbook air mi 2011
Mac Mini M1
Go to the top of the page
 
+Quote Post
schlum
posté 2 Jul 2004, 00:00
Message #8


Terminaltor
Moderating Machine
*****

Groupe : Admin
Messages : 24 449
Inscrit : 25 Oct 2002
Lieu : Jeumont (59)
Membre no 4 319



Le PHP tient la route pour ce genre de problèmes wink.gif

Bon, je vais préciser un peu mon idée :
une table FICHIERS avec comme champs :
FID, OWNER_ID, NOM, REPERTOIRE, autres_infos ...
une table USERS avec comme champs :
UID, LOGIN, PASSE, autres_infos ...
une table DROITS avec comme champs :
DID, FID, UID, autres_spécificités ...

Lorsqu'un USER uploade un fichier, tu crées un répertoire au nom aléatoire, tu mets ce fichier dedans ; tu crées une entrée dans la table FICHIERS avec le nom, le répertoire et l'id + l'id de l'uploadeur.
Lorsque tu veux rajouter un droit à un user sur un fichier, tu crées une entrée dans la table DROITS avec l'id du user et l'id du fichier.

Quand un utilisateur se logue, il aura un lien qui le mènera à une page (php) ou il pourra voir (et downloader) les fichiers auxquels il a droit ; cette page fera simplement un "SELECT DISTINCT FID form `DROITS` WHERE UID=$id_user", et pour chaque résultat, créera une ligne avec un lien de la forme <A href="./$repertoire/$nom">$nom</A>

Compris ? wink.gif
(bon, là c'est simpliste ce que j'ai fait, on peut élaborer un truc bien plus chiadé avec la gestion des fichiers uploadés, ajout, supression ... et la gestions des fichiers auxquels on a droit ...)


--------------------
          I think therefore I Mac          
Go to the top of the page
 
+Quote Post
SuperCed
posté 2 Jul 2004, 06:36
Message #9


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 2 831
Inscrit : 19 Jul 2001
Lieu : Живим у Греноблу
Membre no 519



Qu'est ce qui empéche l'utilisateur en question de directement exécuter la requête sql :
SELECT DISTINCT FID form `DROITS' sans le where, et de récupérer ainsi tous les chemins d'accès de tous les fichiers. Je parle ici de quelqu'un qui essaierai de pirater les fichiers.

C'est là mon plus grand problème!


--------------------
Хајде Јано коло да играмо
iMac 27 mi 2010
Macbook air mi 2011
Mac Mini M1
Go to the top of the page
 
+Quote Post
SuperCed
posté 2 Jul 2004, 06:38
Message #10


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 2 831
Inscrit : 19 Jul 2001
Lieu : Живим у Греноблу
Membre no 519



Je viens de voir qu'on peut restreindre les users autorisé à localhost, mais n'est-ce pas trop limite pour la sécurité. Si l'utilisateur arrive à lancer la requête que j'ai mise précédemment, il peut trouver tous les chemin d'accès de tous les fichiers.


--------------------
Хајде Јано коло да играмо
iMac 27 mi 2010
Macbook air mi 2011
Mac Mini M1
Go to the top of the page
 
+Quote Post
schlum
posté 2 Jul 2004, 07:59
Message #11


Terminaltor
Moderating Machine
*****

Groupe : Admin
Messages : 24 449
Inscrit : 25 Oct 2002
Lieu : Jeumont (59)
Membre no 4 319



QUOTE (SuperCed @ 2 Jul 2004, 07:36)
Qu'est ce qui empéche l'utilisateur en question de directement exécuter la requête sql :
SELECT DISTINCT FID form `DROITS' sans le where, et de récupérer ainsi tous les chemins d'accès de tous les fichiers. Je parle ici de quelqu'un qui essaierai de pirater les fichiers.

C'est là mon plus grand problème!

Bien entendu, n'importe qui ne peut pas lancer une commande SQL comme ça blink.gif MySQL se protège très bien, accès localhost seulement avec un mot de passe ! La commande est générée par un fichier PHP, donc il n'y a aucun problème wink.gif
Heureusement que les bases de données sur internet ne marchent pas comme ça ; j'imagine bien sur un site de banque un mec qui pourrait faire "SELECT no_compte,nom FROM `USERS` tongue.gif
De plus, la source PHP d'un fichier ne peut pas être récupérée comme ça, donc on peut y mettre des passes en clair sans problème pour la connexion MySQL
--> Tu crées un user ROOT, tu lui mets un passe correct, et tu crées ces tables sous sa juridiction, personne ne pourra y toucher autrement que par le biais de l'interface web wink.gif


--------------------
          I think therefore I Mac          
Go to the top of the page
 
+Quote Post
SuperCed
posté 2 Jul 2004, 11:07
Message #12


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 2 831
Inscrit : 19 Jul 2001
Lieu : Живим у Греноблу
Membre no 519



Ok, merci.

En fait, je ne savais pas trop à quel point il fallait faire gaffe à la sécurité en php.

Donc le principe énoncé ici avec des génération de nom de dossier aléatoire me semble très bien.

Finalement, je vais donc rester dans du php/mySQL sans problème.

Merci pour les réponses!

Faudra juste que je fasse bien gaffe à ce que les gens de puisse pas uploader des fichiers qui pourraient être interprétable par le module php ou autre.

Je vais faire une table qui définie les extensions que l'on peut accepter en upload.
Ou alors, peut-etre qu'il vaut mieux que j'interdise tout simplement certaines extensions (.php, .php3, etc). Existe-il une liste exhaustive des extensions à interdire absolument?

Merci


--------------------
Хајде Јано коло да играмо
iMac 27 mi 2010
Macbook air mi 2011
Mac Mini M1
Go to the top of the page
 
+Quote Post
PierreB
posté 2 Jul 2004, 11:20
Message #13


Macbidouilleur de vermeil !
****

Groupe : Membres
Messages : 1 022
Inscrit : 7 Oct 2002
Lieu : Cholet (49)
Membre no 4 005



je ne pesne pas qu'il y ai besoin d'interdire l'upload de fichier php, cvar même lui à besoin d'un mot de passe pour accèder à la base de données. En plus tu peut t'arrangé pour que les fichiers ne soit pas affiché mais téléchargé, donc les fichiers php potentiels ne seraient pas traité comme tel mais comme fichier banal, donc pas de risque de ce côté je pense.


--------------------
MacBook CD/ 160 Go/1 Go de RAM/ MacOS X.4.11/Lecteur Zip 250 Mo USB/ Epson Stylus C 70 et C 86 /Base airport Extreme
Go to the top of the page
 
+Quote Post
schlum
posté 2 Jul 2004, 18:50
Message #14


Terminaltor
Moderating Machine
*****

Groupe : Admin
Messages : 24 449
Inscrit : 25 Oct 2002
Lieu : Jeumont (59)
Membre no 4 319



Ne t'inquiètes pas, on ne peut pas downloader un fichier PHP wink.gif Heureusement, sinon n'importe qui pourrait effacer la base des forums de Macbidouille par exemple tongue.gif

[Edit] Ah, j'avais pas vu que le problème était pour le upload, c'est sûr, j'avais pas pensé à ça dry.gif Mais bon, vu qu'il y a besoin d'un passe pour se connecter à une base, c'est pas un problème je pense wink.gif
Enfin c'est sûr, vaut mieux interdire l'upload de fichiers php, cgi, applets Java, applis flash ...
[Edit2] Merde, ça fait restrictif ça ; je vais réfléchir au problème ...

[Edit3] Bon, j'ai réfléchi ; pourquoi ne pas utiliser le module bzip de PHP pour compresser les fichiers avant de les mettre sur le serveur ? wink.gif Comme ça tu autorises tout, y a plus de problème, rien ne sera interprété par le serveur ... tongue.gif


--------------------
          I think therefore I Mac          
Go to the top of the page
 
+Quote Post
SuperCed
posté 4 Jul 2004, 22:25
Message #15


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 2 831
Inscrit : 19 Jul 2001
Lieu : Живим у Греноблу
Membre no 519



Pas con, je vais y penser...


--------------------
Хајде Јано коло да играмо
iMac 27 mi 2010
Macbook air mi 2011
Mac Mini M1
Go to the top of the page
 
+Quote Post
domH
posté 19 Jul 2004, 07:46
Message #16


Adepte de Macbidouille
*

Groupe : Membres
Messages : 102
Inscrit : 5 Mar 2004
Lieu : Anglet
Membre no 15 760



J'utilise owl qui répond apparemment au cahier des charges.
Cordialement


--------------------
G4 2x867 OSX.5 / PIV 2,4 Debian
Go to the top of the page
 
+Quote Post
SuperCed
posté 19 Jul 2004, 08:49
Message #17


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 2 831
Inscrit : 19 Jul 2001
Lieu : Живим у Греноблу
Membre no 519



QUOTE (domH @ 19 Jul 2004, 07:46)
J'utilise owl qui répond apparemment au cahier des charges.
Cordialement
*


Je ne suis pas certain qu'il réponde à tous mes beoins, mais j'avoue que ça a l'air pas mal du tout!!!

Peut-être qu'en le modifiant un peu, je pourrai avoir ce que je cherche.
En tous cas, merci beaucoup, ça me permettra au moins d'avoir toutes les routines de base déjà programmées.


--------------------
Хајде Јано коло да играмо
iMac 27 mi 2010
Macbook air mi 2011
Mac Mini M1
Go to the top of the page
 
+Quote Post
sky
posté 19 Jul 2004, 09:03
Message #18


Macbidouilleur de vermeil !
****

Groupe : Membres
Messages : 1 161
Inscrit : 10 Jul 2001
Lieu : Nice / Sophia Antipolis
Membre no 486



Je ne reprouve pas le projet que j'avais vu qui gerer des fichier de la maniere dont tu le veux.
Il s'agissait d'un systeme java qui gerait directement des fichiers sur un system de fichiers ext2 ( avec gestion des droits, etc... ) avec une interface HMTL genere a partir de jsp et gestion des downloads avec ftp utilisant les memes mot de passe de compte.

Je vais chercher plus mais je te garantie rien.


--------------------
Articles sur l'univers Apple, le dev web, le gaming et le retro-gaming : skymac.org, un sous-site dédié au Cube, un autre dédié à la compatibilité de jeux émulés : Mac Emulation Compatibility Lists
Mon CMS web : CaMykS | sur GitHub
----
Stages de pilotage sur terre : P2C-Racing
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 27th April 2024 - 18:41