Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1987 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Protection répertoire utilisateur

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Protection répertoire utilisateur

n°862199
VoD
Posté le 01-10-2004 à 15:15:44  profilanswer
 

Bonjour,
 
J'ai un petit soucis et je sais pas trop comment m'y prendre en fait ...
J'ai une appli sous tomcat où les utilisateurs ont des répertoires perso pour y stocker des données.
 
Je voudrais qu'un utilisateur ne puisse accéder qu'à son rep ou un groupe de répertoire qu'il gère. C'est-à-dire qu'on ne puisse pas accéder à un repertoire d'un autre utilisateur en entrant une url en dur.
 
Est-ce qu'il existe un moyen simple pour entreprendre cela ?
 
Merci
VoD

mood
Publicité
Posté le 01-10-2004 à 15:15:44  profilanswer
 

n°862379
VoD
Posté le 01-10-2004 à 17:36:29  profilanswer
 

Est-ce que sous tomcat il y a un system comme sous apache , c'est-à-dire le fichier .htaccess ?

n°862552
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 01-10-2004 à 21:30:22  profilanswer
 

L'accès au ressources du répertoire ne doit pas être fait en saisissant une URL directement dans le browser, sinon il n'y aura aucune sécurité.
 
Je pense que tes répertoires persos contenant les données doivent être situés hors de l'arborescence web (pour empêcher le cas du dessus) et que l'accès à ces ressources doit être fait en passant par une Action (au sens Struts) qui contrôle l'identité des users avant d'afficher les fichiers... T'auras une Action pour lister le répertoire, une autre pour télécharger un fichier (via Servlet/Action)...
 
C'est la théorie, après pour l'implémentation y'a du code en vue en fonction de l'état actuel de ton appli

n°862710
benou
Posté le 02-10-2004 à 01:34:38  profilanswer
 

VoD a écrit :

Est-ce que sous tomcat il y a un system comme sous apache , c'est-à-dire le fichier .htaccess ?


regarde au niveau des security-constraint dans le web.xml
 
j'ai jamais trop touché à ca, mais je pense que c'est à ca que ca sert ...
 
maintenant, tu peux aussi gérer ca très facilement aver un filtre


Message édité par benou le 02-10-2004 à 01:34:48

---------------
ma vie, mon oeuvre - HomePlayer
n°863855
VoD
Posté le 04-10-2004 à 09:30:39  profilanswer
 

benou a écrit :

regarde au niveau des security-constraint dans le web.xml
 
j'ai jamais trop touché à ca, mais je pense que c'est à ca que ca sert ...
 
maintenant, tu peux aussi gérer ca très facilement aver un filtre


 
En fait j'ai déjà testé en intégrant un truc du style :
 

Code :
  1. <security-constraint>
  2.   <web-resource-collection>
  3.   <web-resource-name>Protected Area</web-resource-name>
  4.     <url-pattern>/documents/*</url-pattern>
  5.     <http-method>GET</http-method>
  6.     <http-method>POST</http-method>
  7.     <http-method>DELETE</http-method>
  8.   </web-resource-collection>
  9.   <auth-constraint>
  10.     <role-name>OpacUser</role-name>
  11.   </auth-constraint>
  12. </security-constraint>
  13. <login-config>
  14.   <auth-method>BASIC</auth-method>
  15.   <realm-name>Admin</realm-name>
  16. </login-config>
  17. <welcome-file-list>
  18.   <welcome-file>/index.jsp</welcome-file>
  19. </welcome-file-list>


 
Mais en fait il me bloquait l'accès à toute les données, et donc çà j'ai pas trop compris. Alors que je voulais que juste le répertoire "documents" soit protégé.
 
Pour ta solution machinbidule1974, je pense qe cela ne va pas être possible d'envisager cela ... Trop de choses à changer mais merci quand même.
 
Je vais quand même tenter de continuer avec les security constraints car je pense que c'est la bonne voie.

n°863860
VoD
Posté le 04-10-2004 à 09:37:29  profilanswer
 

Je viens de trouver un petit tuto la dessus !
J'vous donne le lien , ca peut interesser du monde  
 
http://etudiant.univ-mlv.fr/~mrous [...] php?rub=20
 
 
J'vous tiens au courant en cas de succès ... ou de galère :)

n°863873
VoD
Posté le 04-10-2004 à 10:02:32  profilanswer
 

Bon ...
 
En fait j'voudrais utiliser une authentitification par formulaire.
Il existe un méthode à implémenter dans son web.xml de l'application  
 

Code :
  1. <login-config>
  2. <auth-method>FORM</auth-method>
  3. <form-login-config>
  4. <form-login-page>/login.jsp</form-login-page>
  5. <form-error-page>/error.jsp</form-error-page>
  6. </form-login-config>
  7. </login-config>


 
Et notre formulaire a cette gueule après  
 

Code :
  1. <form method="POST" action="j_security_check">
  2. Login : <input type="text" name="j_username">
  3. Mot de passe :<input type="password" name="j_password">
  4. <input type="submit" value="Entrer !"></td>
  5. <input type="reset" value="Annuler">
  6. </form>


 
Comme vous voyez , on  est obliger de passer en action j_security_check pour authentifier l'utilisateur via les realm.
 
Mon problème, c'est qu'à l'authentification d'un gars, je dois effectuer un traitement : implémentation de variables de session, redirection spécifique à son statut ... Comment est-il possible de mettre en oeuvre cela ?
 

n°863909
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 04-10-2004 à 10:36:52  profilanswer
 

Ma propre expérience sur la mise en place de contraintes de sécurité sur une webapp.
 
Appli sous WebSphere.
 
Contrainte de sécurité positionnée sur les JSPs et les URLs en *.do via web.xml (comme t'as fait au-dessus)
 

  • Le user saisit une URL style http://localhost:8080/maWebApp/login.do
  • Le conteneur de servlet intercepte la requête et détermine que le user n'est pas loggé, comme il y a une contrainte de sécurité sur l'URL en *.do...
  • Il redirige vers le formulaire de connexion avec ses champs user/password
  • La soumission de ce formulaire appelle la servlet d'authentification j_security_check (Dans mon cas, le user/pwd était contrôlé par rapport à un annuaire LDAP d'entreprise).
  • Si l'authentification rate, le conteneur de servlets appelle une page qui doit être paramétrée dans web.xml et qui correspond au cas de l'authentification qui foire (/error.jsp chez toi).
  • Autrement, l'URL en http://localhost:8080/maWebApp/login.do est appelée après authentification du user. C'est dans cette action que tu dois positionner tes variables de session, rediriger le user vers une JSP selon son profil...


Tu peux récupérer le user saisi au login par request.getRemoteUser()


Message édité par machinbidule1974 le 04-10-2004 à 10:39:01
n°863913
VoD
Posté le 04-10-2004 à 10:43:29  profilanswer
 

machinbidule1974 a écrit :

C'est dans cette action que tu dois positionner tes variables de session, rediriger le user vers une JSP selon son profil...


 
Oui j'avais bien compris tout ce que tu explique au dessus, mais ca veut dire qu'il faut que je mette çà en place sur toute les pages existentes ?????
 
Aie aie aie c'est impossible LOL
 
On peut pas directement après qu'il ait fait la méthode j_security_check, appellé ma servlet  ? via une méthode javascript ou autre ?
 

n°863921
El_gringo
Posté le 04-10-2004 à 11:00:01  profilanswer
 

Personallement, je pense que d'ici peu, j'aurai le même genre de chose à faire, à savoir :
identification d'un utilisateur (système déja en place)
lecture de ses droits
accès à certains répertoires (lister et accèder aux ressources) en fonction des droits
Pour intégrer ça à mon appli, ce sera surement + simple que j'implémente ma propre servlet, qui servira les dits répertoire et fichiers (qui ne seront donc pas des sous répertoires de l'appli web).


Message édité par El_gringo le 04-10-2004 à 11:00:51
mood
Publicité
Posté le 04-10-2004 à 11:00:01  profilanswer
 

n°863942
VoD
Posté le 04-10-2004 à 11:14:14  profilanswer
 

El_gringo a écrit :

Personallement, je pense que d'ici peu, j'aurai le même genre de chose à faire, à savoir :
identification d'un utilisateur (système déja en place)
lecture de ses droits
accès à certains répertoires (lister et accèder aux ressources) en fonction des droits
Pour intégrer ça à mon appli, ce sera surement + simple que j'implémente ma propre servlet, qui servira les dits répertoire et fichiers (qui ne seront donc pas des sous répertoires de l'appli web).


 
En fait actuellement c'est ce que j'ai fait, c'est à dire implémenter ma propre servlet. Mais mon soucis est qu'un utilisateur peut aller voir les données d'un autre en tapant une url brute.
 
Après 2 choses, c'est impossible que je fasse un test sur chaque pages individuellement vu que j'en ai des centaines et des centaines par utilisateur. Donc je cherche, je cherche ...

n°863982
El_gringo
Posté le 04-10-2004 à 11:43:18  profilanswer
 

Ben, comment tu occtrois à tel ou tel utilisateur un droit sur un répertoire ?

n°863993
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 04-10-2004 à 11:49:22  profilanswer
 

VoD a écrit :

En fait actuellement c'est ce que j'ai fait, c'est à dire implémenter ma propre servlet. Mais mon soucis est qu'un utilisateur peut aller voir les données d'un autre en tapant une url brute.
 
Après 2 choses, c'est impossible que je fasse un test sur chaque pages individuellement vu que j'en ai des centaines et des centaines par utilisateur. Donc je cherche, je cherche ...


 
Je suis pas sûr d'avoir tout compris à ton problème...
 
Mais dans ton URL, tu ne dois pas saisir de données identifiant ton user autrement c'est très facile de gruger ton appli pour aller voir d'autres données que les siennes. Tu dois récupérer le user de l'utilisateur depuis un objet stocké dans sa session http.
 
Si malgré tout, tu es obligé de faire comme ça, tu dois contrôler avant d'effectuer toute action que ton user est bien celui qu'il prétend être: vérifier le paramètre saisi dans l'URL par rapport à une donnée stockée en session...
 
Pour éviter d'avoir à mettre en place un contrôle sur les droits d'accès à chaque JSP, il faut factoriser ce code de contrôle d'accès dans ta servlet "en amont" des JSPs (Modèle MVC2 type Struts)
 
Les utilisateurs ne doivent jamais accéder directement aux JSPs en saisissant une URL, la servlet d'action doit servir de point d'entrée à ton application. C'est bcp + simple d'y placer le code de contrôle des droits (exécution / accès)


Message édité par machinbidule1974 le 04-10-2004 à 11:50:10
n°864013
VoD
Posté le 04-10-2004 à 12:09:39  profilanswer
 

El_gringo a écrit :

Ben, comment tu occtrois à tel ou tel utilisateur un droit sur un répertoire ?


 
dans ma BDD il a un nom de répertoire qu'y lui est attribué
 

machinbidule1974 a écrit :

Mais dans ton URL, tu ne dois pas saisir de données identifiant ton user autrement c'est très facile de gruger ton appli pour aller voir d'autres données que les siennes. Tu dois récupérer le user de l'utilisateur depuis un objet stocké dans sa session http.


 
Nan nan j'ai une page de login ou après je récupère les données et sotcke le tout dans des variables de sessions.
A partir de cela je peux savoir à qui appartient tel ou tel repertoire.
 

machinbidule1974 a écrit :


Si malgré tout, tu es obligé de faire comme ça, tu dois contrôler avant d'effectuer toute action que ton user est bien celui qu'il prétend être: vérifier le paramètre saisi dans l'URL par rapport à une donnée stockée en session...


 
Le problème vis à vis de cela, c'est que j'ai souvent des PDF dans le repertoire des users, donc je ne peux faire aucun controle la dessus.
 
Par ex, si un petit malin tape : http://monsite.com/repUser/toto/titi.pdf et que ce rep ne lui appartient pas, il y accede qd même.
 
C'est pour cela que j'aimerai faire un style d'autenthification comme j'ai cité précédemment, tout en ayant accès à ma servlet.

n°864016
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 04-10-2004 à 12:12:49  profilanswer
 

Je serai toi, je placerai tes répertoires contenant les PDFs hors de l'arborescence web et je servirai le fichier uniquement si le user a le droit d'accès via une action.

n°864020
El_gringo
Posté le 04-10-2004 à 12:16:01  profilanswer
 

VoD a écrit :

dans ma BDD il a un nom de répertoire qu'y lui est attribué


 
Ben voila, alors c'est pas compliqué de savoir (et tester) si tel répertoire est autorisé à tel utilisateur

n°864022
El_gringo
Posté le 04-10-2004 à 12:17:12  profilanswer
 

machinbidule1974 a écrit :

Je serai toi, je placerai tes répertoires contenant les PDFs hors de l'arborescence web et je servirai le fichier uniquement si le user a le droit d'accès via une action.


 
C'est ce que je te disais de faire avec une servlet à toi : servir le ou les répertoire(s) autorisé(s), mais en ne les plaçant pas dans le répertoire de ta web app

n°864023
VoD
Posté le 04-10-2004 à 12:17:57  profilanswer
 

machinbidule1974 a écrit :

Je serai toi, je placerai tes répertoires contenant les PDFs hors de l'arborescence web et je servirai le fichier uniquement si le user a le droit d'accès via une action.


 
 
C'est-à-dire ? En dehors de webapps/monAppli ?

n°864028
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 04-10-2004 à 12:19:29  profilanswer
 

VoD a écrit :

C'est-à-dire ? En dehors de webapps/monAppli ?


 
Hors du répertoire WEB-INF

n°864029
VoD
Posté le 04-10-2004 à 12:19:37  profilanswer
 

ok j'vais testé çà.
et normalement les autres clients ne pourront pas y accéder via une url en dure avec ce moyen ?

n°864031
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 04-10-2004 à 12:19:58  profilanswer
 

Oops, j'ai dit une bêtise. Je viens de vérifier, tes ressources ne doivent pas être dans le répertoire qui sert de racine à ta webapp. Par exemple "Web Content" sous WSAD v5 ou "Web Application" v4.
 
Les ressources dans WEB-INF ne sont pas accessibles via l'URL
 
Mea culpa


Message édité par machinbidule1974 le 04-10-2004 à 12:22:16
n°864032
VoD
Posté le 04-10-2004 à 12:20:23  profilanswer
 

machinbidule1974 a écrit :

Hors du répertoire WEB-INF


 
Actuellement ils ce sont pas dans le rep WEB-INF, mais sur la racine de l'application

n°864035
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 04-10-2004 à 12:22:31  profilanswer
 

cf mon post au dessus

n°864040
VoD
Posté le 04-10-2004 à 12:28:28  profilanswer
 

Ha ok ok ok !
Bien cool çà !
 
Donc en gros je place mes docs dans le rep WEB-INF
Après comment je leurs donnent accès aux fichiers si tu me dit que C pas accessible ?  
C'est juste via url ?  
Si je mets un lien à un users ca passe ?

n°864045
El_gringo
Posté le 04-10-2004 à 12:33:13  profilanswer
 

VoD a écrit :

Ha ok ok ok !
Bien cool çà !
 
Donc en gros je place mes docs dans le rep WEB-INF
Après comment je leurs donnent accès aux fichiers si tu me dit que C pas accessible ?  
C'est juste via url ?  
Si je mets un lien à un users ca passe ?


 
Ben non, justement, on vient de te dire que c'est pas accessible par URL qd tu mets dans ce répertoire. C pour ça que je te disais d'écrire toi même une servlet qui va rendre disponible via URL, uniquement le contenu des répertoires qu'il faut, aux utilisateurs qu'il faut. Pour "servir" des répertoires, dossier, ça dépend ce que tu veux pouvoir en faire, mais c le même principe que pr ttes les servlets HTTP.

n°864049
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 04-10-2004 à 12:37:40  profilanswer
 

Tu peux placer tes fichiers dans WEB-INF ou n'importe quel autre répertoire plus approprié comme C:\MonAppliPDF...
 
Pour qu'un user accède à ses PDFs, il devra utiliser une URL comme http://localhost:8080/monAppliWeb/ [...] chier.pdf.
 
Ce qui va lancer une action ConsulterPDF, laquelle va vérifier que le user a bien le droit d'accéder au PDF et envoyer dans le flux de sortie de la HttpServletResponse le PDF sous forme binaire (Méthode response.getOutputStream().write())...
 

n°864051
VoD
Posté le 04-10-2004 à 12:38:29  profilanswer
 

oui oui gringo j'avais bien capté le principe =)
Mon bide a fin ptet pour ca que me suis mal interprété !
 
Bon j'tente tout ca apres bouffé !
 
Merci pour votre aide

n°864052
VoD
Posté le 04-10-2004 à 12:40:15  profilanswer
 

machinbidule1974 a écrit :

Tu peux placer tes fichiers dans WEB-INF ou n'importe quel autre répertoire plus approprié comme C:\MonAppliPDF...
 
Pour qu'un user accède à ses PDFs, il devra utiliser une URL comme http://localhost:8080/monAppliWeb/ [...] chier.pdf.
 
Ce qui va lancer une action ConsulterPDF, laquelle va vérifier que le user a bien le droit d'accéder au PDF et envoyer dans le flux de sortie de la HttpServletResponse le PDF sous forme binaire (Méthode response.getOutputStream().write())...


 
 
OK pour le principe , no soucy , mais euh euh c'est quoi un .do ??  :heink:

n°864107
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 04-10-2004 à 13:29:01  profilanswer
 

Est-ce-que tu utilises Struts pour ta webapp ?
 
Autrement, ".do", c'est le suffixe apposé à toutes URIs d'une webapp développée avec Struts, c'est une convention.


Message édité par machinbidule1974 le 04-10-2004 à 13:29:46
n°864114
VoD
Posté le 04-10-2004 à 13:39:16  profilanswer
 

nan j'utilises pas Struts et je t'avouerai que je connais même pas.
Pour çà que je connais pas ce fameux .do ;)

n°864130
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 04-10-2004 à 13:48:27  profilanswer
 

Par curiosité, est-ce-qu'il est possible d'accéder à une JSP en saisissant juste son URL (en *.jsp) dans le navigateur ? Et est-ce-que tes JSPs intègrent du code java permettant de récupérer des données en base ?


Message édité par machinbidule1974 le 04-10-2004 à 13:49:21
n°864152
VoD
Posté le 04-10-2004 à 14:02:30  profilanswer
 

oui tout à fait

n°864156
VoD
Posté le 04-10-2004 à 14:03:28  profilanswer
 

Et ca te permet de faire quoi en gros les Struts ?
Leurs principals atouts ?
 
Pour savoir si C interessant que je me lance là dedans ou non

n°864205
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 04-10-2004 à 14:43:58  profilanswer
 

Ca te permet de bénéficier d'un framework "MVC de type 2" séparant clairement les aspects logique métier, présentation et contrôle de l'application.
 
Le gros avantage, c'est qu'il n'y a qu'une servlet dans l'application qui sert de point d'entrée, toutes le requêtes sont traitées par cette servlet (impossible de la bypasser). Ainsi il est facile de mettre en place une gestion de la confidentialité avec ce type de framework: il suffit de modifier la servlet d'action.
 
Les JSPs ne sont jamais accédées directement (par saisie d'une URL dans le navigateur), elles ne contiennent que du code pour faire la mise en page (itérations...) et aucun accès aux données. Conséquence: il est impossible d'appeler une JSP à laquelle tu n'as pas accès car elle ne possèdera pas les données pour réaliser l'affichage.
 
Schématiquement:
 
1) Saisie d'une URL en *.do dans le browser
2) Appel de la servlet d'action qui fait correspondre l'URI appelée à une Action donnée
3) Appel de la logique de l'Action (accès à la base de données, création de beans de présentation rattachés à la requête)
4) Redirection de la requête vers la JSP qui va formatter le résultat du traitement en utilisant les beans de données instanciés en amont (étape 3).
5) Envoi du HTML généré au browser
 
Apprendre Struts, ce n'est pas une perte de temps du tout.
 
Dans l'état actuel de ton appli (ce que j'en ai compris), si tu veux mettre en place une politique de sécurité, comme il y a autant de points d'entrée dans la webapp que de JSPs appelables, il faut répéter n fois ta modif dans chaque JSP pour contrôler les droits d'accès...

n°864223
VoD
Posté le 04-10-2004 à 15:07:41  profilanswer
 

machinbidule1974 a écrit :

Dans l'état actuel de ton appli (ce que j'en ai compris), si tu veux mettre en place une politique de sécurité, comme il y a autant de points d'entrée dans la webapp que de JSPs appelables, il faut répéter n fois ta modif dans chaque JSP pour contrôler les droits d'accès...


 
C'est bien ce dont j'ai peur ...
Je vais quand même regarder les Struts et essayer de'approfondir au niveau des contraites de sécurité

n°864228
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 04-10-2004 à 15:09:43  profilanswer
 

Le problème, c'est que ton appli est déjà développée et que c'est trop tard pour te mettre à Struts (il va falloir porter ton appli vers Struts). De +, c'est une "technique" assez lourde à apprendre et pas forcément nécessaire si le projet est trop petit.

n°864257
VoD
Posté le 04-10-2004 à 15:23:07  profilanswer
 

Clair je pense que je vais laché l'affaire pour cela sachant que c'est juste pour un problème et que plus de 70% de mon appli est bouclée.
Mais j'y penserai pour une autre fois, je vais un peu me documenté la dessus

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Protection répertoire utilisateur

 

Sujets relatifs
CFileDialog et sélection de répertoireRecuperer le login de l utilisateur courant sur le poste client
Eviter l'affichage des fichiers d'un repertoire? [résolu]pb htaccess, authoriser l'acces à un seul repertoire d'un repertoire?
[vba] Liste des fichiers d'un sous-répertoirecomment recuperer le repertoire partager sous delphi ?
Outil graphique pour interface utilisateurModification droit d'un répertoire
Retourner un tableau d'éléments de type utilisateur[BATCH] creation de repertoire avec la date du jour ?
Plus de sujets relatifs à : Protection répertoire utilisateur


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR