2010-03-21 5 views
2

J'ai un système sur lequel les employés peuvent télécharger des fichiers. Il y a trois façonsSécurisation de fichiers sur le Web: Accès aux fichiers à autorisation précise Grained

Ajouter à mon compte en mode public, privé ou protégé
Ajouter au compte du service en mode public, privé ou protégé
Télécharger pour compte de l'organisation en mode public, privé ou protégé

où le public est visible pour tous, privé pour le groupe ou la personne seulement et protégé pour n'importe qui dans l'organisation.

Tous les fichiers pour une organisation sont stockés dans un répertoire, dire/fichiers/<organizationid> /, sur le serveur de fichiers comme

fichiers
+ - 234809
| + img1.jpg
| + doc1.pdf
+ - 808234
| + doc2.pdf

Je stocke le chemin de fichier et le niveau de confidentialité dans DB. Ainsi, je peux contrôler si montrer un lien vers une URL de fichier à un utilisateur - sur une page donnée. Le problème est que je n'ai aucun contrôle sur l'URL du fichier ... donc, si quelqu'un saisit l'URL dans img1.jpg dans la barre d'adresse de son navigateur, il n'y a aucun moyen de savoir si un utilisateur connecté est éligible pour voir img1.jpg.

Une suggestion?


C'est une application Java. Cependant, une instance distincte de Glassfish fonctionne en tant que serveur de fichiers. Comme l'application n'est pas encore disponible, nous sommes ouverts à une meilleure stratégie d'accès aux fichiers. L'utilisateur qui accède aux fichiers peut ou non être connecté. Mais nous pouvons toujours, authentifier un utilisateur en redirigeant vers la page de connexion si nous savons que le fichier auquel il accède est privé ou partagé.

Merci
Nishant

Répondre

1

Vous posez une question intéressante et votre compréhension du problème est correct. En fonction de la version d'IIS qui traite le contenu, vous n'avez peut-être même pas de contrôle d'accès si le contenu se trouvait dans votre vdir.

Une solution typique à ce type de scénario est de stocker les fichiers dans un répertoire qui n'est pas accessible à Internet et d'utiliser un HttpHandler qui est protégé et de diffuser les fichiers.

Il existe plusieurs façons de procéder, la plus simple étant un HttpHandler mappé à un répertoire inexistant, dire/downloads, et analyser le nom de fichier hors de RequestUri, définir le type de contenu approprié et écrire le fichier dans Response.

Dans ce cas, votre HttpHandler IS est protégé, ce qui vous permet de déterminer l'accès.

+0

Oui, c'est net. Dans cette approche, probablement l'URL aura le contexte pour le fichier. comme http://abc.com/downloads/[some-encrypted-key]/img1.jpg et le gestionnaire HTTP déduira l'accessibilité en fonction des informations d'identification de l'utilisateur et de l'autorisation requise de la clé. Mais un robot peut continuer à essayer et y accéder, bien que la probabilité soit vraiment faible. Ce que je pensais récemment, que peut-être je peux avoir un fichier de métadonnées attaché à chaque fichier comme avec img1.jpg il y a un fichier img1.md, lorsque l'utilisateur accède au fichier le gestionnaire lire les métadonnées et vérifier. Mais la lecture de fichiers sur une page avec 100 fichiers peut être douloureuse. – Nishant

+0

@Nishant - clarifiez dans votre question quelle plateforme vous utilisez et si les utilisateurs qui vont accéder aux 'téléchargements' sont authentifiés par un login et nous pouvons partir de là. –

+0

C'est une application Java. Cependant, une instance distincte de Glassfish fonctionne en tant que serveur de fichiers. Comme l'application n'est pas encore disponible, nous sommes ouverts à une meilleure stratégie d'accès aux fichiers. L'utilisateur qui accède aux fichiers peut ou non être connecté. Mais nous pouvons toujours, authentifier un utilisateur en redirigeant vers la page de connexion si nous savons que le fichier auquel il accède est privé ou partagé. – Nishant

0

Vous pouvez stocker les fichiers en dehors des dossiers publics et disposer d'une sorte d'itinéraire pour intercepter toute URL demandant un fichier à une organisation.Ensuite, vous pouvez servir le fichier par programme, plutôt que de laisser votre serveur web le faire sans aucun contrôle.

+0

ouais, c'est ce que nous avons fini par faire. – Nishant

Questions connexes