2009-08-28 9 views
1

J'ai développé une sorte d'explorateur de serveur en tant que module pour notre application web, et cela fonctionne vraiment bien. Je fais des améliorations et il y a un problème que je ne sais pas vraiment comment aborder.Perl: Obtenir l'état .htaccess sur le dossier en cours

L'explorateur est principalement utilisé pour choisir des images d'un dossier et de sous-dossiers spécifiés. Comme certaines écoles sont concernées par la distribution d'images en dehors de leur établissement, nous leur avons donné une option pour sécuriser leurs images avec .htaccess (en fait sur l'interface Web qui à son tour définit le .htaccess) si elles le souhaitent.

Lorsque j'essaie d'accéder à un dossier protégé par .htaccess, un mot de passe est demandé pour chaque image de ce dossier. Il convient de noter que les enseignants ont tendance à faire plus de 100 photos sur chaque événement majeur et aiment le caser dans un seul dossier, de sorte qu'il n'est pas rare que le navigateur ouvre plus de 100 boîtes de dialogue.

Nous exécutons Perl dans le backend, j'ai donc pensé pouvoir vérifier si un dossier donné est protégé ou non avant de livrer le contenu à jQuery. Le problème est, les images peuvent également être protégées par un .htaccess d'un dossier parent.

Existe-t-il un moyen sûr de vérifier si un étranger peut accéder à ces images (ou fichiers, pour le garder générique et ouvert à d'autres usages) avant de donner les images?

EDIT - fichier .htaccess Ajouté
## OLEFA AUTH ## DÉBUT
AuthType Basic
AuthName "192.168.1.120/resources/images/accesstest"
AuthUserFile/home/mike/espace de travail/olefa // ressources/images/AccessTest/.htpasswd
exigent valid-user
## OLEFA AUTH FIN ##

+0

Votre navigateur ne sauvegarde pas les cookies? Vous ne devriez pas être invité à plusieurs reprises pour un mot de passe du fichier .htaccess. Quelque chose d'autre ne va pas, je pense. – Telemachus

+3

L'authentification HTTP n'utilise pas * les cookies. La plupart des navigateurs se souviennent des informations d'identification et les fournissent lors de demandes ultérieures. –

+1

@Mike Je pense que "fonctionne très bien" est basé sur des informations limitées. J'ai vu trop d'applications qui "fonctionnent bien" remplies de trous béants. Vous donnez un faux sentiment de sécurité à vos utilisateurs à moins que l'authentification HTTP ne se produise sur une connexion sécurisée (SSL). –

Répondre

1

une option que vous pouvez explorer est stocker un fichier d'espace réservé non-image dans chaque répertoire et la récupération avant la images. Si vous ne parvenez pas à le récupérer, vous n'effectuez pas l'extraction d'image et vous l'interprétez comme signifiant que le répertoire est sécurisé contre cet utilisateur. De cette façon, vous n'obtiendrez qu'une seule boîte de dialogue de mot de passe, et s'ils ont un nom d'utilisateur et un mot de passe valides, le navigateur s'en souviendra pour les récupérations d'images.

+0

Il y a peut-être un problème sur ce point, car jQuery renvoie un succès si JSON a été chargé, indépendamment de si le fichier est accessible ou non. (JSON fournit uniquement les liens vers les pages alors que jQuery essaye de les mettre en place). Je pensais à un moyen pour Perl de savoir si quelque chose n'est pas publiquement disponible et sinon, retourner un paramètre spécial pour que jQuery puisse demander des informations d'identification avant d'essayer de charger des images (ou au moins ne pas laisser jQuery essayer de charger les images ou supprimez complètement ce dossier de la liste). – Mike

+1

Alors ne partez pas si jQuery a retourné un succès; passez par le fait qu'il a récupéré le contenu connu du fichier d'espace réservé (par exemple, le mot "succès"). – chaos

+0

Il est également possible que .htaccess contienne des directives qui restreignent des ensembles de fichiers spécifiques, donc à moins que le fichier d'espace réservé ne soit dans cet ensemble, la technique se romprait dans ce cas, indiquant que l'accès est autorisé alors qu'il est restreint. –

0

Il semble que vous construisiez couche par couche de code fixe pour une conception ou un processus déficient.

Si vous obtenez la boîte de dialogue nom d'utilisateur-mot de passe pour chaque image du même répertoire, je pense d'abord:

  1. htaccess est en quelque sorte mal configuré. Pouvez-vous nous montrer ce que vous avez?
  2. L'agent utilisateur n'envoie pas l'en-tête d'autorisation. Regardez les requêtes HTTP pour vérifier que vous voyez un en-tête Authorization. Regardez également le statut de la réponse. Est-ce 401 ou 403?

Si vous tentez d'accéder à des ressources sur des chemins différents, utilisez-vous un domaine différent pour chaque dossier? Les informations d'identification s'appliquent uniquement au domaine qui a présenté le défi. Si vous accédez à un autre domaine et que vous devez recommencer. Comment spécifiez-vous cela dans votre htaccess?

D'autres choses qui pourraient nous aider:

  • Quelle sorte d'authentification que vous utilisez? De base, Digest, autre chose?
  • Utilisez-vous un gestionnaire d'autorisation personnalisé?
+0

Mise à jour: .htaccess est maintenant en question – Mike