web-dev-qa-db-fra.com

Comment nier l'accès Web à certains fichiers?

Je dois faire une opération un peu étrange.

Premièrement, je cours sur Debian, Apache2 (qui "fonctionne" comme utilisateur www-data)

Donc, j'ai un fichier texte simple avec .txt ot .ini ou quelle que soit la prolongation, ne compte pas.

Ces fichiers sont situés dans des sous-dossiers avec une structure comme celle-ci:

www.example.com/folder1/car/foobar.txt www.example.com/folder1/cycle/foobar.txt www.example.com/folder1/fisfoobar.txt www.example.com/folder1/fruit/foobar .SMS

par conséquent, le nom du fichier est toujours le même, idem pour la "hiérarchie", change simplement le nom du dossier: /folder-name-static/folder-name-dinamyc/file-name-static.txt

Ce que je devrais faire, c'est (je pense) relativement simple: je dois être en mesure de lire ce fichier par des programmes sur le serveur (Python, PHP par exemple), mais si j'essaie de récupérer le contenu du fichier par Broswer (à la recherche de l'URL www. Exemple.com/folder1/car/foobar.txt ou via Curl, etc.) Je dois obtenir une erreur interdite ou autre, mais non accéder au fichier.

Il serait également agréable que même l'accès à ces fichiers via FTP est "caché" ou de toute façon ne pouvait pas être téléchargé (au moins que j'utilise avec la racine FTP et les données utilisateur)

Comment puis-je faire?

J'ai trouvé cela en ligne, soyez mis dans le fichier .htaccess:

<Files File.txt>
 Order allow, deny
 Deny from all
</ Files>

Il semble fonctionner, mais uniquement si le fichier est dans la racine Web (www.example.com/myfile.txt) et non dans les sous-dossiers. De plus, les dossiers du deuxième niveau (www.example.com/folder1/--Fruit/foobar.txt) seront créés dinamycalement. Je voudrais éviter de modifier le fichier .htaccess de temps à temps.

Il est possible de créer une règle, quelque chose comme ça, qui va pour tous les fichiers avec le nom donné, qui est sur * www.example.com/dossier-nom-name-static/* Nom du dossier-DinamyC/** * name-name-static.txt *, où ces pièces sont toujours les mêmes , juste ** qu'on change?

ÉDITER :

Comme Dave Drager a dit, je pouvais séparer cela en gardant ce fichier en dehors du répertoire Web accessible. Mais ces fichiers contiendront également les autres fichiers, des images et des objets utilisés par mes utilisateurs, donc je suis simplement essayer de ne pas avoir de système de dossiers en double, comme:

/var/www/vhosts/example.com/httpdocs/folder1/car/[other folders and files here]
/var/www/vhosts/example.com/httpdocs/folder1/cycle/[other folders and files here]
/var/www/vhosts/example.com/httpdocs/folder1/fish/[other folders and files here]

//and, then for the 'secrets' files:

/folder1/data/car/foobar.txt
/folder1/data/cycle/foobar.txt
/folder1/data/fish/foobar.txt
12
Strae

Oui, c'est tout possible. Toutefois, si vous avez des programmes sur le serveur qui doivent accéder aux fichiers texte, ils doivent résider hors de la racine Web. Par exemple, si vos fichiers Web sont in ~/public_html /, vous devez les stocker dans ~/Data. Il n'y a aucune raison de les placer dans le dossier HTML public.

En plus de les supprimer du dossier Web, assurez-vous que les autorisations Unix sont définies correctement sur elles. L'utilisateur des scripts devrait avoir lu (écrire?) Accès, mais quelqu'un d'autre n'a pas à avoir cet accès.

Si vous avez besoin de ces fichiers dans un dossier accessible au Web, il existe des moyens de faire ce que vous demandez via mod_rewrite. Voir le site Suivre pour de nombreux exemples, dont l'un devrait correspondre à la facture.

http://perishablepress.com/press/2006/01/10/stupid-htaccess-tricks/

1
Dave Drager

Pourquoi ne pas utiliser les autorisations de fichier Unix standard pour refuser l'accès au fichier?

Il y a une explication décente sur Wikipedia sur Autorisations de fichier UNIX

0
cyberkni

Du Commande Section de la documentation:

Les mots-clés ne peuvent être séparés que par une virgule; Aucunespace n'est autorisé entre eux.

Donc, ce qui suit est incorrect:

<Files File.txt>
Order allow, deny
Deny from all
</ Files>

Ce qui suit est (plus) correct

<Files "File.txt">
Order allow,deny
Deny from all
</Files>
0
ebichuhamster

Après vous avoir lu tous, j'ai remarqué que le fichier .htaccess peut être le moyen pour moi: n'affecte que les fichiers du dossier où il se trouve.

Mais mes dossiers sont générés de manière dynamique. Je ne pense pas que copier le fichier .htaccess ou le recréer à chaque fois que je crée un nouveau dossier est un moyen fiable.

Comme Dave a dit, la manière logique devrait stocker les fichiers texte de configuration en dehors du dossier accessible au Web.

Mais dans chaque dossier, je dois stocker d'autres fichiers, des images pour des exemples, qui doivent être accessibles au Web ... et je ne pense toujours pas que la structure des dossiers, dans et si la racine Web-Rootory est une manière fiable aussi bien. . Par conséquent, je devrai modifier même la configuration Apache pour inclure le dossier de configuration dans le chemin PHP autorisé. Cela ne devrait pas être un problème, de toute façon.

Donc, si je n'ai pas le mieux, je dois choisir le moins pire un.

Je vais utiliser la solution multiple de fichiers .htaccess, pour l'instant, dans l'espoir de ne pas avoir de regrets à l'avenir.

Toutes les autres solutions sont appréciées.

0
Strae