Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > Templates > Smarty
Smarty Forum d'entraide sur le moteur de templates Smarty. Avant de poster -> FAQ Smarty et Cours Smarty
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/09/2007, 14h50   #1
Membre éclairé
 
Avatar de speedev
 
Développeur Web
Inscription : mai 2006
Messages : 936
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2006
Messages : 936
Points : 347
Points : 347
Par défaut Sécurité des TPL

Bonjour,

J'utilise Smarty et je souhaiterais pouvoir empêcher un visiteur quelconque sur mes sites d'accéder directement à mes templates smarty depuis son navigateur sans passer par ma page principale (index.php).

Je pensais à faire ceci :
- Renommer tous mes tpl avec l'extension .tpl.php
- Encadrer le code du template entre deux lignes PHP à savoir :
Code :
1
2
3
<?php if ($right_of_open) { ?>
[ Le code du template ]
<?php } else { echo "Vous n'êtes pas autorisé à consulter cette page"; ?>
La page index principale disposant de C'est opérationnel biensur mais avez-vous une solution plus pratique (plus propre) svp ?

merci
__________________
Développeur indépendant sur technos Web à votre service
speedev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2007, 14h56   #2
Membre Expert
 
Inscription : octobre 2002
Messages : 1 141
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2002
Messages : 1 141
Points : 1 204
Points : 1 204
Envoyer un message via MSN à Raideman
Bien en fait, et je suis désolé si ça ne répond pas à ta question, je ne comprends pas l'intérêt d'empecher la visualisation d'un template. Après tout, le but du template est d'etre affiché non ? Donc de toutes façons on peut afficher le source de la page et deviner assez simplement la structure du template je pense.

De plus, je ne pense pas que les données incluses dans le template soient sources de failles de sécurité.

M'enfin, peut etre as tu des besoins vraiment spécifiques sur ce point là.
Raideman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2007, 15h02   #3
Membre éclairé
 
Avatar de speedev
 
Développeur Web
Inscription : mai 2006
Messages : 936
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2006
Messages : 936
Points : 347
Points : 347
Oui mais il s'agit d'un site avec authentification d'utilisateur donc on dipose de tags SMARTY spécifiques dans les templates, par exemple :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
{if $login!=0}
<div id="left">
	<div class="menu_left">
		<div class="logo spacer">
			Données spécifiques pour login
		</div>
	</div>
</div>
{else}
<div id="left">
	<div class="menu_left">
		<div class="logo spacer">
			Données pour tout le monde
		</div>
	</div>
</div>
{/if}
Si tu appelles ce template tu verras les tags smarty directement dans la page (!!!) car les libs smarty ne sont pas appelées.

Peut-être y a t-il quelque chose de prévu avec smarty pour cela ?
__________________
Développeur indépendant sur technos Web à votre service
speedev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2007, 15h22   #4
Membre éclairé
 
Avatar de speedev
 
Développeur Web
Inscription : mai 2006
Messages : 936
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2006
Messages : 936
Points : 347
Points : 347
Franchement je trouve cela très surprenant. Il doit bien exister une méthode pour masquer ce code. Même s'il n'avance pas beaucoup un éventuel petit malin à faire des bêtises c'est quand même une "mise à nu" d'un code censé être lu par le serveur (PHP).

Ou alors j'ai zappé quelque chose...
__________________
Développeur indépendant sur technos Web à votre service
speedev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2007, 17h26   #5
Membre Expert
 
Inscription : octobre 2002
Messages : 1 141
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2002
Messages : 1 141
Points : 1 204
Points : 1 204
Envoyer un message via MSN à Raideman
Ben comme je le disais, je ne vois pas en quoi voir les tags smarty pourraient constituer une faille ...
Raideman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2007, 17h30   #6
Membre éclairé
 
Avatar de speedev
 
Développeur Web
Inscription : mai 2006
Messages : 936
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2006
Messages : 936
Points : 347
Points : 347
non mais faut admettre qu'il s'agit de code de traitement (comme PHP) et qu'il n'est pas censé être vu par le client...
__________________
Développeur indépendant sur technos Web à votre service
speedev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2007, 17h32   #7
Membre Expert
 
Inscription : octobre 2002
Messages : 1 141
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2002
Messages : 1 141
Points : 1 204
Points : 1 204
Envoyer un message via MSN à Raideman
Oui, c'est possible, c'est d'ailleurs l'une des raisons qui me chagrinent un peu dans ces systèmes de template, c'est qu'on déplace des traitements (meme si ils sont consacrés à de l'affichage) dans des templates . (mais bon évidemment, c'est un choix, soit on déplace de l'affichage dans le php, soit on déplace du traitement dans le template).
Raideman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2007, 17h34   #8
Membre éclairé
 
Avatar de speedev
 
Développeur Web
Inscription : mai 2006
Messages : 936
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2006
Messages : 936
Points : 347
Points : 347
Je cherche une astuce
__________________
Développeur indépendant sur technos Web à votre service
speedev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2007, 21h02   #9
Invité de passage
 
Inscription : avril 2006
Messages : 13
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 13
Points : 4
Points : 4
salut,

Je me pose actuellement la même question que toi.

Ce que je pensais faire, c'est modifier la classe Smarty pour qu'elle reconnaisse les balises php natives (<?php et ?>) plutôt que les balises smarty {php} {/php}.

J'ai pas encore essayer mais je crois avoir repérer une RegExp dans la classe Smarty qui s'occupe de ça.

En plus le deuxième avantage, et pas des moindres, c'est que si ça marche, dreamweaver reconnaitra enfin la syntaxe PHP puisqu'il y aura les vrais balises php dans les templates.
SlymDesign est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2007, 11h03   #10
Membre éclairé
 
Avatar de speedev
 
Développeur Web
Inscription : mai 2006
Messages : 936
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2006
Messages : 936
Points : 347
Points : 347
Je pense qu'il faut mieux adopter la méthode couramment utilisée à savoir isoler les TPL (et autres données éventuelles) à l'extérieur du répertoire WEB afin qu'elles ne soient pas accessibles depuis un navigateurs WEB. J'ai employé cette méthode, c'est radicale et hautement sécurisé.
Petite contrainte : il faut s'habituer à la nouvelle arborescence des dossiers et fichiers séparés entre deux dossiers principaux (online et offline) et être un poil plus rigoureux dans son organisation, mais c'est tout benef'....
__________________
Développeur indépendant sur technos Web à votre service
speedev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2007, 19h50   #11
Invité de passage
 
Inscription : avril 2006
Messages : 13
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 13
Points : 4
Points : 4
Et un simple .htaccess ne ferait pas l'affaire ?
SlymDesign est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2007, 19h54   #12
Membre éclairé
 
Avatar de speedev
 
Développeur Web
Inscription : mai 2006
Messages : 936
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2006
Messages : 936
Points : 347
Points : 347
C'est jouable avec un htaccess mais moins intéressant à mon goût.
Je préfère la solution d'externaliser les fichiers "protégés" à l'extérieur de la racine web.
__________________
Développeur indépendant sur technos Web à votre service
speedev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2007, 23h04   #13
Membre Expert
 
Inscription : octobre 2002
Messages : 1 141
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2002
Messages : 1 141
Points : 1 204
Points : 1 204
Envoyer un message via MSN à Raideman
D'autant que le htaccess va te demander des codes à chaque fois que tu vas utiliser un template pour l'afficher

Maintenant comme tu le suggères, tu peux placer tes templates dans un répertoire non accéssible via le web.
Raideman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2007, 23h36   #14
Invité de passage
 
Inscription : avril 2006
Messages : 13
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 13
Points : 4
Points : 4
euh ... non ... Il est possible de bloquer tous les accés distants à un répertoire sans pour autant avoir besoin d'une authentification en local.

Je ne vois pas comment on fait pour faire un répertoire hors web sur serveur mutualisé. Est-ce que c'est possible au moins ?
SlymDesign est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2008, 15h29   #15
Membre éclairé
 
Avatar de speedev
 
Développeur Web
Inscription : mai 2006
Messages : 936
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2006
Messages : 936
Points : 347
Points : 347
Hello, je reviens sur ce post.

Je n'ai pas abandonné la pratique du répertoire "offline" et je l'ai même déployée partout...

Mais attention, utiliser un répertoire "offline" hors du document_root présente des subtilités et contraintes.

Pour ma part j'utilise un fichier unique de configuration de l'application ou du site web (un INI que je parse). Au même niveau que ce fichier de conf se trouvent mes deux répertoires principaux :
- httpdocs/ par exemple
- httpdocs-offline/ pour le répertoire offline par exemple.
(Qlqun de ce forum m'avait déjà conseillé cette pratique...)

Aujourd'hui :
- 90% de mes fichiers sont dans httpdocs-offline/ (les fichiers php, les templates, les modules, les classes...) et sont donc inaccessibles depuis un navigateurs Web.
- 10% dans httpdocs/ (images/, css/... et biensur le index.php) contenu accessible depuis le navigateur Web

J'ai encore des incertitudes avec la méthode mais j'apprécie beaucoup son utilisation car je m'y suis bien accoutumé et qu'elle m'offre une grande souplesse de configuration et de sécurisation des traitements.

Ennui rencontré pour le moment :
- J'utilise des chemins systèmes pour accéder au répertoire offline par exemple : /var/www/monsite.com/httpdocs-offline/ (biensur les chemins sont stockés dans des constantes...), et donc je dépend de la configuration de la machine. A noter qu'il y a moyen d'utiliser $_SERVER['DOCUMENT_ROOT'] pour trouver le répertoire "offline" en remontant d'un niveau dans l'arborescence mais je n'ai pas encore modifier ma conf.
- Plesk ! Cette chouette interface est figée et ne permet pas de modifier les droits sur les dossiers d'un vhost, par conséquent on ne peut créer le répertoire "offline" que par l'intermédiaire du compte root (une manip à faire en plus...légère et non récurrente vous me direz...) pour qu'il soit utilisable par l'utilisateur FTP (pour y déposer des fichiers). L'utilisateur FTP n'a de droit que sur le répertoire web httpdocs/... Dommage...

Si vous avez des réflexions...je reste à l'écoute.

a+
__________________
Développeur indépendant sur technos Web à votre service
speedev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2008, 15h36   #16
Membre éclairé
 
Avatar de speedev
 
Développeur Web
Inscription : mai 2006
Messages : 936
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2006
Messages : 936
Points : 347
Points : 347
http://www.developpez.net/forums/sho...d.php?t=245238

J'ai retrouvé le conseil de Yogui
La méthode est effectivement celle utilisée dans les architectures MVC (modèles vue controller)...
__________________
Développeur indépendant sur technos Web à votre service
speedev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 17h07   #17
Membre régulier
 
Inscription : juillet 2007
Messages : 171
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : juillet 2007
Messages : 171
Points : 85
Points : 85
Salut speedev,

Tout d'abord merci pour mettre à jour cette discussion...
Simplement, je ne comprend pas quel est le problème de sécurité lorsque l'on affiche les balise smarty dans le template.

De plus, par rapport à ton arborescence, commet par exemple afficher une page par exemple contact.tpl si seul ton index n'est accessible depuis le navigateur web?
arnogb69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 17h35   #18
Membre éclairé
 
Avatar de speedev
 
Développeur Web
Inscription : mai 2006
Messages : 936
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2006
Messages : 936
Points : 347
Points : 347
Rectification ce n'est tant une histoire de sécurité mais de "garantie" plutôt.
Disons même du perfectionnisme.

Je me sens plus à l'aise avec un minimum de données dans le document_root càd JUSTE le nécessaire (image, css etc....). "boaf si c'est pour éviter la piraterie, faut pas oublier qu'un pirate peut passer par d'autres portes", c'est vrai mais encore une fois je préfère isoler un maximum de fichiers.

Pour ta deuxième question :
Avec un sniffer il est facile de récupérer l'arborescence d'un site Web. Une fois l'arbo trouvée, on cherche un peu et on trouve les TPL. On teste les urls comme par exemple :

http://www.le-site.com/templates/accueil.tpl

Et on découvre les balises smarty qui pourraient être, à titre de mauvais exemple :
Code :
1
2
3
4
5
6
7
 
{if $login}
    Bienvenue {$login}, tu as {$age} ans.
    N'oublie pas de te connecter sur http://www.top-secret.com/truc.php?clef=ldskfs4s1dfdsf pour récupérer les données
{else}
    Bienvenue, inscrivez-vous !
{/if}
Ce serait vraiment le cas d'un mauvais développement oui...le sniffeur découvre l'URL... mais ça résume un peu ce que je veux dire.

Smarty c'est du PHP (avec des "if" des "else" des "foreach" etc...), en tout cas un langage "capable" de faire du traitement (c'est traduit par du php...), il ne faut donc pas, à mon goût, qu'il soit "visible" depuis un navigateur à moins d'avoir la garantie que le développement n'engendre aucune faille ni aucune divulgation de donnée. Donc que l'on respecte bien la séparation de la couche traitement et de la couche présentation.

a+
__________________
Développeur indépendant sur technos Web à votre service
speedev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 17h45   #19
Membre régulier
 
Inscription : juillet 2007
Messages : 171
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : juillet 2007
Messages : 171
Points : 85
Points : 85
Ah oui, en effet, j'ai bien compris le problème que pourrais susciter l'affichage du .tpl, une solution serait de passer en paramètre par Smarty toutes les données susceptibles d'être importantes, mais le problème n'est pas là... et surtout en effet la logique du code reste visible

Pour ma première question, je ne comprend toujours pas pourquoi tu n'as qu'un fichier php accessible; comment accéder aux autres fichiers php s'ils ne sont pas visibles (une chose m'échappe, cela doit être simple, mais mieux vaut poser des questions plutot que d'avoir de mauvaises surprises)
arnogb69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 18h14   #20
Membre éclairé
 
Avatar de speedev
 
Développeur Web
Inscription : mai 2006
Messages : 936
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2006
Messages : 936
Points : 347
Points : 347
Ma pratique est assez simple :

J'ai développé une classe extends de Smarty qui gère entièrement mes fichiers (php et tpl). Disons même que je dépends d'un objet PHP.

Dans mon document_root je n'ai donc qu'un seul fichier "index.php" et dans ce dernier il y a très peu de code et ce n'est que de la configuration puis de l'instanciation de classes diverses (dont l'objet smarty).

Tout le site utilise l'Url Rewriting et chaque lien pointant vers une page HTML se caractérise donc par une réécriture, exemple simple :
accueil.html = index.php?page=accueil

Dans index.php, je récupère les variables de pages ensuite j'appelle mon objet smarty qui va s'occuper des traitements associés aux pages demandées :
- Recherche la présence d'un éventuel fichier de traitement PHP qui s'appèlerait accueil.php (dedans se trouvera tous les traitements relatifs à la page accueil), si il en existe un, l'objet effectue un simple require du fichier PHP (il remonte donc dans l'arborescence jusqu'en dehors du document_root). J'utilise des constantes pour ça...
- Puis , recherche de la présence d'un TPL, s'il existe, tu connais la suite, l'objet effectue un smarty->display de accueil.tpl

Je t'ai sommairisé la chose, mes traitements sont plus nombreux et optimisés.
Pour l'instant je n'ai rencontré aucun problème (vive la POO !), je touche du bois.
__________________
Développeur indépendant sur technos Web à votre service
speedev est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h58.


 
 
 
 
Partenaires

Hébergement Web