Submitted by itii on
Bonjour le forum,
Attention, un novice de plus dans l'univers Drupal!
Je m'occupe de maintenir un site développé avec Drupal et après avoir passé quelques jours à regarder comment ce CMS fonctionne, je m'occupe de corriger quelques failles de sécurité.
Observation:
Un "user" appartient à un groupe "userGroup" et "monSiteDrupal" requiert une authentification pour accéder aux différents "node". J'ai un problème de sécurité avec des fichiers qui sont présents dans le dossier "monSiteDrupal/files/admin/userGroup/file.pdf" puisqu'ils sont accessibles sans que l'utilisateur n'ait besoin de s'identifier; c'est à dire en entrant directement l'url du fichier "file.pdf" (http://www.monSiteDrupal/files/admin/userGroup/file.pdf)
Est-ce que quelqu'un aurait une solution à mon problème ? .htaccess ou script Php ou ..?
Merci d'avance,
Baptiste
Le mode 'Private' de la page
Permalien Soumis par Numerizen le 5 Mai, 2009 - 18:54
Le mode 'Private' de la page admin/settings/file-system est là pour ça.
Bonjour Numerizen, J'ai bien
Permalien Soumis par itii le 6 Mai, 2009 - 09:47
Bonjour Numerizen,
J'ai bien trouvé la page où je peux modifier le mode 'Publique' en 'Privé', ceci étant, j'ai une erreur sur mon tableau de bord :
"File Download Method -- Private Downloads
Imagecache will not operate properly using Private Files. Please enable Public File Transfer."
Remarque:
Cette option permet d'interdire le transfert des fichiers directement pas le protocol http or sur la page d'accueil de "monSiteDrupal" j'ai des fichiers mis à disposition pour des "users" non identifiés... est-ce que cela va s'avérer bloquant?
Merci d'avance,
Bap
Oui, ça risque. La
Permalien Soumis par Numerizen le 6 Mai, 2009 - 09:58
Oui, ça risque.
La solution de juls, en dessous, est plus souple. Par contre, il faut être prudent avec les .htaccess : on a vite fait de planter tout le bazar.
Personnellement, j'ai créé
Permalien Soumis par Juls le 5 Mai, 2009 - 22:35
Personnellement, j'ai créé un .htaccess dont le contenu est le suivant.
Ceci interdit l'accès à des pages spécifiques si l'appel ne se fait pas depuis l'url du site. Ca vaut ce que ça vaut, mais ça marche.
Options None
Options +FollowSymLinks
SetEnvIfNoCase Referer "^http://www.monsite.com/" acces_local=1
<FilesMatch ".(gif|jpg|png|pdf|css|js|JPG)">
Deny from all
Allow from env=acces_local
</FilesMatch>
Juls, Numerizen, tout
Permalien Soumis par itii le 6 Mai, 2009 - 14:02
Juls, Numerizen,
tout d'abord merci pour votre aide pour ma problématique.
Je n'ai cependant pas encore trouvé la solution optimale puisque le code de Juls (pour un ".htaccess") me bloque l'accès aux fichiers choisis pour tous les internautes qui visitent "monSiteDrupal" qu'ils soient visiteurs ou utilisateurs authentifiés...
Or, dans un dossier donné, j'ai besoin que les utilisateurs authentifiés aient accès à certains fichiers PDF.
Arf ! En fait, je me suis
Permalien Soumis par Juls le 6 Mai, 2009 - 21:55
Arf !
En fait, je me suis peut-etre mal exprimé... Je reformule.
MAIS, s'il y a un lien SUR TON SITE qui pointe vers un de ces fichiers, l'utilisateur qui clique sur le lien (depuis ton site) aura accès au fichier protégé.
En effet, le .htaccess interdit l'accès à tes fichiers si ces accès se font depuis un domaine différent du tien.
Partant de ce principe :
Sur une page accessible à tout le monde, tu mets un lien vers "MonFichier1.pdf"
Si un visiteur arrive sur ton site, il aura accès à ce fichier. Il lui suffira de cliquer sur le lien.
Sur une page protégée (accessible après identification), tu mets un lien vers "MonFichierEnAccesRestreint.pdf", l'utilisateur qui a accès à cette page a aussi accès à ce fichier. (toujours en cliquant sur le lien).
Dernier cas : l'utilisateur non identifié connait le chemin d'accès au fichier "MonFichierEnAccesRestreint.pdf"
exemple : http://monsiteamoi.com/sites/mesfichiers/MonFichierEnAccesRestreint.pdf"
S'il tape cette adresse, il n'arrivera pas à accéder au fichier puisqu'il faut qu'il ait cliqué sur un lien de ton site pour y parvenir.
Personnellement j'utilise cette méthode combinée avec le module Node Privacy By Role et ça marche super bien.
Tiens nous au courant !
Bonjour Juls, le
Permalien Soumis par itii le 7 Mai, 2009 - 10:57
Bonjour Juls, le forum,
C'est bien cool de prendre du temps pour mon problème!
J'ai vraiment un truc qui ne colle pas, c'est curieux; Je travaille en local sur mon PC pour éviter de faire des tests en production. Et voila exactement ce que j'ai fait :
#
# Apache/PHP/Drupal settings:
#
# Protect files and directories from prying eyes.
<FilesMatch ".(engine|inc|info|install|module|profile|po|sh|.sql|theme|tpl(.php)?|xtmpl)$|^(code-style.pl|Entries.|Repository|Root|Tag|Template)$">
Order allow,deny
</FilesMatch>
<strong>
SetEnvIfNoCase Referer "^http://www.itii-pdl.com" acces_local=1
<FilesMatch ".(pdf|PDF|csv|CSV|doc|DOC|xls|XLS|txt|TXT)">
Deny from all
Allow from env=acces_local
</FilesMatch>
</strong>
# Don't show directory listings for URLs which map to a directory.
Options -Indexes
# Follow symbolic links in this directory.
Options +FollowSymLinks
# Customized error messages.
ErrorDocument 404 /index.php
# Set the default handler.
DirectoryIndex index.php
# Override PHP settings. More in sites/default/settings.php
# but the following cannot be changed at runtime.
php_value memory_limit 1024M
#php_value upload_max_filesize 32000000
# PHP 4, Apache 1.
<IfModule mod_php4.c>
php_value magic_quotes_gpc 0
php_value register_globals 0
php_value session.auto_start 0
php_value mbstring.http_input pass
php_value mbstring.http_output pass
php_value mbstring.encoding_translation 0
</IfModule>
# PHP 4, Apache 2.
<IfModule sapi_apache2.c>
php_value magic_quotes_gpc 0
php_value register_globals 0
php_value session.auto_start 0
php_value mbstring.http_input pass
php_value mbstring.http_output pass
php_value mbstring.encoding_translation 0
</IfModule>
# PHP 5, Apache 1 and 2.
<IfModule mod_php5.c>
php_value magic_quotes_gpc 0
php_value register_globals 0
php_value session.auto_start 0
php_value mbstring.http_input pass
php_value mbstring.http_output pass
php_value mbstring.encoding_translation 0
</IfModule>
# Requires mod_expires to be enabled.
<IfModule mod_expires.c>
# Enable expirations.
ExpiresActive On
# Cache all files for 2 weeks after access (A).
ExpiresDefault A1209600
# Do not cache dynamically generated pages.
ExpiresByType text/html A1
</IfModule>
# Various rewrite rules.
<IfModule mod_rewrite.c>
RewriteEngine on
# Rewrite current-style URLs of the form 'index.php?q=x'.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>
# $Id: .htaccess,v 1.81.2.4 2008/01/22 09:01:39 drumm Exp $
En local, j'ai bien évidemment SetEnvIfNoCase Referer "^http://localhost/site_web_itii/" acces_local=1 au lieu de SetEnvIfNoCase Referer "^http://www.itii-pdl.com" acces_local=1
En incluant ton bout de code dans le ".htaccess" existant, j'espère ainsi que la prise en compte sera sur tout le site..
==> Tout semble fonctionner en local, mais pas en production! L'accès aux pages est interdit pour tous les utilisateurs, authentifiés comme annonymes !! :-(
Est-ce que tu vois quelque chose à laquelle je n'aurai pas fait attention, ou bien que je n'aurai pas comprise?
Merci, ++
Bap
Salut ! Personnellement, je
Permalien Soumis par Juls le 7 Mai, 2009 - 14:21
Salut !
Personnellement, je pars du principe qu'il faut éviter toute modification sur l'installation de base de drupal, surtout en terme de sécurité et donc de fichiers .htaccess.
C'est pour cette raison que je me suis contenté d'ajouter mon .htaccess spécifique uniquement sur les répertoires nécessitant une protection particulière.
Et... ça marche !
Tiens moi au courant !
Re tout le monde! ne
Permalien Soumis par itii le 6 Mai, 2009 - 16:26
Re tout le monde!
ne pourrait-on pas s'en sortir avec des redirections d'URL ?
Merci d'avance pour vos réponses,
--
Baptiste