Astuce pour sécuriser l'affichage d'un site eZ Publish
Par Clochix le mardi 26 août 2008, 00:20 - Technoweb - Lien permanent
Lors de la réalisation d'un site avec eZ Publish, il peut être utile de définir les comportements par défaut pour gérer les cas limites, par exemple l'affichage d'un contenu dans un contexte que vous n'aviez pas prévu. Une illustration des possibles problèmes de sécurité des CMS que j'évoquais tantôt. J'espère amorcer avec cette astuce une mise en commun de bonnes pratiques de sécurisation des CMS.
Une des forces d'eZ Publish est son mécanisme de surcharge et de spécialisation. Par exemple, pour l'affichage des contenus, les squelettes peuvent être définis dans plusieurs designs. L'un de ces designs sera celui par défaut du sous-site (siteaccess) courant, d'autres des designs additionnels, enfin un design par défaut sera utilisé en cas d'échec des précédents.
Par exemple si vous créez un mini-site satellite de votre site toto, vos réglages ressembleront sans doute à cela:
[DesignSettings] SiteDesign=toto_minisite AdditionalSiteDesignList[]=toto_front StandardDesign=standard
C'est à dire que pour afficher un contenu, eZ déterminera d'abord grâce à son mécanisme de surcharges (override) le squelette à utiliser, puis il cherchera ce template. Dans le design du minisite (toto_minisite), puis dans celui du site par défaut (toto_front). Enfin, pour afficher quelque chose s'il n'a pas trouvé de template dans les 2 précédents, il se rabattra par défaut sur le design standard d'eZ.
Mais cette force peut aussi être une faiblesse. Si un utilisateur essaie d'afficher un contenu dans un contexte que vous n'avez pas prévu, le contenu sera donc affiché avec le design standard. Et si vous avez fait l'erreur, comme dans mon exemple, d'utiliser un design fournis par eZ comme défaut, ce ne sera pas avec un template contenant vos règles de gestion. Ce template pourra afficher certains champs que vous auriez préféré masquer. Ou pourra permettre d'afficher des contenus dont vous avez oublié d'interdire l'accès.
Une solution est d'utiliser un de vos designs comme dernière alternative:
SiteDesign=toto_minisite AdditionalSiteDesignList[]=toto_front StandardDesign=toto
Ainsi, si vous n'avez défini de template pour un objet dans aucun de vos designs, le contenu ne s'affichera pas.
Cette solution est bien sûr un peu radicale, car vous vous privez de tous les templates fournis par eZ, vous obligeant à les surcharger dans vos designs[1]. Mais elle augmente un peu le niveau de "sécurité" de votre site.
Une solution moins radicale est de créer un template n'affichant rien, et
des règles de surcharge par défaut utilisant ce template. Par exemple ajouter à
la fin de votre override.ini.append.php (sachant que les règles
s'appliquent par ordre d'apparition dans ce fichier, donc celles-ci ne
concerneront que les contenus qui ne remplissent aucune des conditions
précédentes) des lignes du genre:
[null-1] Source=node/view/full.tpl MatchFile=null.tpl Subdir=templates
[null-2] Source=content/view/full.tpl MatchFile=null.tpl Subdir=templates
(attention à ne pas oublier de choisir des noms différents pour chacune des règles).
Ainsi, chaque tentative d'affichage d'un contenu avec la vue "full", si elle
n'a pas été interceptée par une règle précédente dans le fichier, utilisera
votre template null.tpl. Il faudra probablement ajouter ce type de
règles pour la plupart des vues disponibles du module content.
Peut-être existe-t-il une solution plus simple, je laisse la parole aux experts eZ...
Edit du 27.08 les experts ont commencé à parler, et comme il l'indique un peu plus bas, Damien vient de consacrer un billet à quelques méthodes pour sécuriser un site eZ Publish. Merci à lui.
Notes
[1] cela dit, côté front, il est rare d'utiliser certains des templates par défaut
Commentaires
Quel est l'intérêt d'avoir un null-1 et null-2, un seul null-1 ne suffirait pas ?
Pas mal du tout pour le reste
Sauf erreur de ma part:
* chacune des règles doit avoir un nom différent, sinon elles s'écrasent
* il faut au minimum créer autant de règles que de templates existant pour la vue ''view'' du module ''content''
Mais c'est à tester, je suis loin de maîtriser toutes les subtilités d'eZ
Ok, merci pour ces compléments.
Pas de trackback sur Clochix.net ? Bref, j'ai publié mes quelques idées sur le sujet sur mon blog : http://pwet.fr/blog/securiser_un_si...
@Damien: oui, désolé, j'avais ré-activé les trackbacks au niveau du site mais oublié de les activer pour ce billet. Je les avais coupés il y a quelques temps, fatigué de supprimer les spams. On va bien voir. J'ai mis un lien vers ton article directement dans le billet.
N'y aurait-il pas moyen de réduire la "visibilité" d'un siteacces plutôt?
Exemple, avec l'arborsencence suivante :
14
|
+-- 75
|
+-- 27
J'ai deux siteaccess "A" et "B"
A ayant pour noeud par défaut le 75 et B le 27.
Il serait intéressant qu'eZ publish considère comme éronnée les URLs : "A/content/view/full/27" et "B/content/view/full/75"
Je cherche actuellement un moyen de faire ça. Si je trouve, je vous en ferai part...