Protection répertoire utilisateur - Java - Programmation
Marsh Posté le 01-10-2004 à 17:36:29
Est-ce que sous tomcat il y a un system comme sous apache , c'est-à-dire le fichier .htaccess ?
Marsh Posté le 01-10-2004 à 21:30:22
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
Marsh Posté le 02-10-2004 à 01:34:38
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
Marsh Posté le 04-10-2004 à 09:30:39
benou a écrit : regarde au niveau des security-constraint dans le web.xml |
En fait j'ai déjà testé en intégrant un truc du style :
Code :
|
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.
Marsh Posté le 04-10-2004 à 09:37:29
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
Marsh Posté le 04-10-2004 à 10:02:32
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 :
|
Et notre formulaire a cette gueule après
Code :
|
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 ?
Marsh Posté le 04-10-2004 à 10:36:52
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)
Tu peux récupérer le user saisi au login par request.getRemoteUser()
Marsh Posté le 04-10-2004 à 10:43:29
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 ?
Marsh Posté le 04-10-2004 à 11:00:01
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).
Marsh Posté le 04-10-2004 à 11:14:14
El_gringo a écrit : Personallement, je pense que d'ici peu, j'aurai le même genre de chose à faire, à savoir : |
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 ...
Marsh Posté le 04-10-2004 à 11:43:18
Ben, comment tu occtrois à tel ou tel utilisateur un droit sur un répertoire ?
Marsh Posté le 04-10-2004 à 11:49:22
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. |
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)
Marsh Posté le 04-10-2004 à 12:09:39
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 : |
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.
Marsh Posté le 04-10-2004 à 12:12:49
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.
Marsh Posté le 04-10-2004 à 12:16:01
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
Marsh Posté le 04-10-2004 à 12:17:12
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
Marsh Posté le 04-10-2004 à 12:17:57
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 ?
Marsh Posté le 04-10-2004 à 12:19:29
ReplyMarsh Posté le 04-10-2004 à 12:19:37
ok j'vais testé çà.
et normalement les autres clients ne pourront pas y accéder via une url en dure avec ce moyen ?
Marsh Posté le 04-10-2004 à 12:19:58
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
Marsh Posté le 04-10-2004 à 12:20:23
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
Marsh Posté le 04-10-2004 à 12:28:28
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 ?
Marsh Posté le 04-10-2004 à 12:33:13
VoD a écrit : Ha ok ok ok ! |
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.
Marsh Posté le 04-10-2004 à 12:37:40
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())...
Marsh Posté le 04-10-2004 à 12:38:29
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
Marsh Posté le 04-10-2004 à 12:40:15
machinbidule1974 a écrit : Tu peux placer tes fichiers dans WEB-INF ou n'importe quel autre répertoire plus approprié comme C:\MonAppliPDF... |
OK pour le principe , no soucy , mais euh euh c'est quoi un .do ??
Marsh Posté le 04-10-2004 à 13:29:01
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.
Marsh Posté le 04-10-2004 à 13:39:16
nan j'utilises pas Struts et je t'avouerai que je connais même pas.
Pour çà que je connais pas ce fameux .do
Marsh Posté le 04-10-2004 à 13:48:27
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 ?
Marsh Posté le 04-10-2004 à 14:03:28
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
Marsh Posté le 04-10-2004 à 14:43:58
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...
Marsh Posté le 04-10-2004 à 15:07:41
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é
Marsh Posté le 04-10-2004 à 15:09:43
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.
Marsh Posté le 04-10-2004 à 15:23:07
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
Marsh Posté le 01-10-2004 à 15:15:44
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