2008-10-04 11 views
0

J'ai un scénario dans lequel je ne suis pas sûr que mon approche soit la meilleure, et j'apprécierais vos commentaires/suggestions.Quelles sont les stratégies pour protéger les ressources Web en fonction de la logique métier?

scénario: J'ai un tas de 'modules' basés sur le flash (swf) qui sont hébergés dans mon application aspnet. Chaque flash a son propre répertoire sur le système de fichiers, qui contient des éléments pour le flash. Considérez cette structure du site simplifié:

/webapp/index.aspx
/webapp/flash/flash1/flash.swf
/webapp/flash/flash1/someimage.jpg
/webapp/flash/flash1/someclip.mp3
/webapp/flash/flash2/flash.swf
/webapp/flash/flash2/someimage.jpg
/webapp/flash/flash2/someclip.mp3

etcetera

où la convention de nommage est /webapp/flash/flash [ID]/

Je veux mettre en place un mécanisme de sécurité qui vérifie si l'utilisateur doit être autorisé à accéder * aux fichiers dans le sous-dossier « [ID ] 'et c'est son contenu.

** logique métier d'insertion en fonction des informations stockées dans une base de données SQL ici *

Je considérais écrire un HttpModule qui fait quelque chose comme

ProcessRequest(){ 
    if(Request.RawUrl.Contains("/webapp/flash") && !userHasValidLicenseForModule(1)){ 
     Redirect("login.aspx");  
    } 
} 

Mais il y a l'inconvénient que HttpModule ne fonctionne que pour le fichier extension qui sont mappés à aspnet (dans IIS6). Cela signifie que je devrais cartographier toutes les extensions possibles de ce processus (.mp3, .jpg etc), ce que je préfère éviter.

Je pensais également utiliser un HttpHandler à la place, mais le fichier flash doit être capable de lier ses ressources en utilisant des URL relatives. (donc un modèle semblable à un proxy comme /webapp/getprotectedstuff.ashx?file=flash1234/flash.swf n'est pas préféré)

Il est peut-être plus judicieux de stocker complètement les fichiers Flash et les ressources externes. Il y a peut-être d'autres stratégies auxquelles je n'ai pas pensé.

Utilisez la sécurité aspnet et rédigez un fournisseur d'appartenances personnalisé?

Des pensées?

Répondre

1

Avez-vous envisagé de simplement valider l'accès aux ressources via une requête HTTP au serveur après le chargement du fichier swf? Là où je travaille nous fournissons des formations en ligne aux utilisateurs via le flash mais plutôt que de vérifier la requête HTTP elle-même, nous permettons au swf de charger d'abord puis de demander au serveur de vérifier que l'utilisateur doit avoir accès au swf et qu'ils accèdent au swf à partir de notre site et non d'un autre endroit. Si une étape de validation échoue (soit ne trouve pas un fichier d'authentification à l'emplacement requis, soit l'utilisateur n'a pas de session valide ou n'a pas accès à la formation en question), il reçoit une erreur dans Flash et aucun contenu important ne se charge jamais.Comme autre remarque, si vous décidez que vous voulez limiter strictement l'accès aux fichiers afin qu'ils ne puissent être chargés que par ceux qui devraient avoir accès, alors je suggèrerais probablement d'utiliser votre seconde option de stockage des fichiers un emplacement séparé, non public, puis en utilisant un script de gestionnaire pour charger le swf. Pourquoi ne pas utiliser un filtre ISAPI?

0


D'accord, ne répondez pas à cela - beaucoup de raisons ;-). Mais sérieusement, si vous avez le pouvoir de dev, vous pourriez envisager cette voie.

Sinon, le module HTTP semble être le meilleur itinéraire, SI vous avez une courte liste fermée d'extensions que vous avez à traiter (GIF, JPG, MP3). Si c'est long, ou ouvert, je serais d'accord et renoncer à cela.

Une autre option que vous pourriez vouloir examiner, le cas échéant, est les listes d'accès NTFS basées sur les rôles. Si cela convient, c'est probablement le moyen le plus simple et le plus propre de le faire.

Questions connexes