begin process at 2010 02 09 21:28:37
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Astuces

 > INCLUDE "SECURISÉ" VIA FICHIER INI FACILEMENT EDITABLE

INCLUDE "SECURISÉ" VIA FICHIER INI FACILEMENT EDITABLE


 Information sur la source

Note :
6,67 / 10 - par 3 personnes
6,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Astuces Classé sous :include, ini, array, faille include, editable Niveau :Débutant Date de création :01/05/2008 Vu :3 971

Auteur : kiki67100

Ecrire un message privé
Site perso
Commentaire sur cette source (19)
Ajouter un commentaire et/ou une note

 Description

Voila un simple code, Pratique qui inclu les page donné dans un fichier ini
peut servir dans plusieur cas , evite les faille "include" car on n'inclu indirectement le fichier

Source

  • <?php
  • $default='default.php';
  • $VarGet='file';
  • $IniFile='test.ini';
  • if(isset($_GET[$VarGet]))
  • {
  • $ini = parse_ini_file($IniFile,TRUE);
  • if(isset($ini['PAGE'][$_GET[$VarGet]])) #Si existe dans le fichier ini
  • {
  • #Existe dans le fichier
  • if(file_exists($ini['PAGE'][$_GET[$VarGet]])) #verifie l'existance du fichier
  • include($ini['PAGE'][$_GET[$VarGet]]); #Existe
  • else
  • include($default); #N'existe pas
  • }else #n'existe pas dans le fichier ini
  • include($default);
  • }
  • ?>
  • Fichier ini ->
  • [PAGE]
  • default=default.php
  • login=login.php
  • admin=admin.php
  • test=test.php
  • ini=test.ini
  • [/PAGE]
  • [AUTRE]
  • [/AUTRE]
<?php 
$default='default.php';
$VarGet='file';
$IniFile='test.ini';

if(isset($_GET[$VarGet]))
{
	$ini = parse_ini_file($IniFile,TRUE);
	if(isset($ini['PAGE'][$_GET[$VarGet]])) #Si existe dans le fichier ini 
	{
	                #Existe dans le fichier
			if(file_exists($ini['PAGE'][$_GET[$VarGet]])) #verifie l'existance du fichier

				include($ini['PAGE'][$_GET[$VarGet]]); #Existe
			
			else 
				include($default); #N'existe pas 
	}else #n'existe pas dans le fichier ini

		include($default); 

}

  ?> 


Fichier ini ->


[PAGE]
default=default.php
login=login.php
admin=admin.php
test=test.php
ini=test.ini
[/PAGE]
[AUTRE]
[/AUTRE]

 Conclusion

Voila un simple code qui fait un include de facon securisé est simple et facile a edité

Simple mais efficace


 Sources du même auteur

Source avec Zip Source avec une capture PETIT CLIENT + AJAX + PHP
Source avec Zip NAVIGATEUR FTP
Source avec Zip Source avec une capture EXPLORATEUR DE FICHIER PHP
CHECK MSN VERIFIE SI UNE PERSONNE EST CONNECTÉ SUR MSN
Source avec Zip SCRIPT ANTI ASPIRATEUR SANS BDD

 Sources de la même categorie

Source avec une capture PAGINATION EN PHP par Orangina
Source avec Zip POO - DEBUGGER par DiGhan
Source avec Zip CRAWLER DE SITE EN PHP par Mcjo
DÉCOUPAGE D'UN TEXTE EN FONCTION DES SAUTS DE LIGNES par biloubil
RÉCUPÉRER LE CHEMIN RELATIF D'UN OBJET PAR RAPPORT À LA RACI... par FredPsy

 Sources en rapport avec celle ci

Source avec Zip EXÉCUTER DES REQUETE STYLE SQL SUR UN ARRAY par prince418
Source avec Zip FUNCTION IMAGE SIMPLE ET ARRAY par astro53
Source avec Zip [PHP5] CLASSE POUR GESTION MULTILANGUES par Epoc22
Source avec Zip [PHP5] CLASSE POUR MANIPULER LE FICHIER MAPCACHE.INI DE CNC ... par Epoc22
Source avec Zip Source avec une capture FONCTION DE PAGINATION INVERSEE OU NON DEPUIS UNE BDD OU UN ... par Asherah

Commentaires et avis

Commentaire de depression le 01/05/2008 08:43:22

Bon, l'intention est louable, ça c'est sûr.

Mais tu t'embêtes pour rien!


Pour sécuriser un include, tu peux utiliser aussi file_exists(), qui empêche que l'on appelle des fichiers proventant d'ailleurs, ou alors faire un switch(), comme ça, tu contrôlles tout, le code d'inclusion est dans un seul fichier, et tu peux facilement implémenter des règles de droits d'accès.

Commentaire de pysco68 le 01/05/2008 09:14:55 6/10

Je me joins à Depression.... et puis sinon require_once() et include_once()... et pour ta gestion d'erreur je ferrais comme ça:

require_once("chemin/vers/mon/fichier/include") or die("Le fichier untel n'a pas pu être chargé!");

qui est au final une solution tout aussi efficace, et bien plus sécurisée puisqu'un intenaute ne pourra pas accéder à ta liste de fichiers inclus contrairement à ton fichier ini...

De moi un 6/10 parce que sinon le code est correcte même si je pense que tu devrait t'habituer à donner encore un peux plus de commentaires (du genre: $default: 'xyz.php'; // Mettez ici.... blah) et à te trouver une façon unifiée d'écrire tes noms de variables (pas changer tout le temps entre Min/Majuscules pour une meilleur lisibilité)...

Bonne journée

Commentaire de didoudu17 le 01/05/2008 09:26:07

Salut moi je me complique un peu la vie^^ mais j'utilise des if :

    <?php
    if ($_GET['page'] == "accueil")
    {
        include("accueil.php");
    }
    
    if ($_GET['page'] == "news")
    {
        include("news.php");
    }
    
    if ($_GET['page'] == "inscription")
    {
        include("inscription.php");
    }
    
    ?>

Commentaire de webdeb le 01/05/2008 10:13:54

Attention ton code est secure à condition aussi que ton fichier INI se trouve dans un répertoire situé en dehors de la racine web ou bien dans un répertoire interdit en lecture par un fichier .htaccess. En effet, le format INI est rendu comme du texte brut dans un navigateur. Il n'est pas interprêté par le serveur web. Donc son contenu doit-être protégé en lecture et en écriture.

++

Commentaire de malalam le 01/05/2008 10:40:35 administrateur CS

Hello,

je trouve aussi l'intention louable. Ceci dit, passer par parse_ini_file() pour ça me semble un peu compliqué. Mais pourquoi pas.

@pysco68 => require_once("chemin/vers/mon/fichier/include") or die("Le fichier untel n'a pas pu être chargé!");
ton or die() ne sert à rien. require génère une erreur fatale si le fichier demandé n'existe pas, et ne renvoie jamais false. Ton die() ne sera jamais exécuté. Ce genre de solution n'est de toute manière pas satisfaisante : on n'essaye pas d'éviter une erreur, on fonce dedans en se disant que si une erreur survient, on quitte le script. Il vaut toujours bien mieux vérifier qu'on n'aura pas d'erreur, plutôt.
Et je ne comprends pas ta phrase qui suit ce bout de code, au passage.

Commentaire de willeraser le 01/05/2008 11:51:41 7/10

Au lieu de permettre aux surfeurs de connaitre le nom des fichiers php que tu utilises, il faut mieux que tu les stock dans un array au moins ca evite que la liste soit lisible.

Sinon, c'est une bonne idée, mais il existe des solutions infiniment plus simples et tout aussi sécurisées, comme certains l'ont dit, en couplant un switch et ensuite avec file_exists() puisque switch te permettra de facon indirect de lister tous les fichiers que tu autorises a l'inclusion et de gérer le cas ou l'utilisateur rendre n'importe quoi (default:)

Commentaire de malalam le 01/05/2008 11:58:18 administrateur CS

Heu ça fait 2 fois : je pourrais savoir en quoi la liste est lisible...?

Commentaire de JoJo738 le 01/05/2008 12:42:33

Salut,

Je rejoins Malalam (salut ^^) dans ses commentaires.

M'enfin, moi j'utilise des includes en fonction de l'architecture de mes dossiers/fichiers ..., je trouve ça plus simple et plus portable

Webdeb & Willeraser > Mais pour rendre le fichier .ini non lisible, il existe une méthode très simple : un fichier config.ini.PHP et mettre en 1er ligne de code :
;<?php die('Hacking !'); ?>
Et voila, fichier sécurisé !

Commentaire de kiki67100 le 01/05/2008 12:48:10

Merci pour vos commentaire,

Enfete le principe de mon code est de pouvoir editer mon "array" (fichier ini) sans modifier le code php

webdeb-> Je suis daccord avec toi on simplement mettre un "." devant le nom du fichier ou le mettre simplement d'un repertoire avec "deny from"

Je prefere utilise les array car on ne vois pas le nom réel des fichier inclu

didoudu17-> Oulalala tu te complique la vie utilise plutot mon code mais ya beaucoup plus simple :)

Commentaire de willeraser le 01/05/2008 13:06:09

Fichier ini ->
[PAGE]
default=default.php
login=login.php
admin=admin.php
test=test.php
ini=test.ini
[/PAGE]
[AUTRE]
[/AUTRE]

*.ini, a moins d'ajouter les .ini dans le htaccess avec un deny from, ils vont ressortir en mode texte, comme avec la plupart des fichiers *.inc
c'est pour ca qu'il faut pas mettre de code php dans un fichier .inc lisible par tout le monde, sinon ca devient du open source involontaire ^^

Commentaire de malalam le 01/05/2008 13:17:42 administrateur CS

Encore faut-il parvenir à accéder au serveur de manière à connaître les noms des fichiers pour pouvoir récupérer le .ini.
Et de toute manière, c'est de la sécurisation de base; et c'est valable pour beaucoup d'autres choses : xml par exemple.
Ensuite, j'aimerais savoir en quoi cela peut poser problème qu'un utilisateur connaisse les fichiers inclus dans un site ? Non parce que pour ça, il suffit de surfer sur le site hein...et on les connait tous, les .php utilisés...et ?

Commentaire de willeraser le 01/05/2008 13:23:28

tu ne connais pas necessairement les fichiers inclus, si tu utilise par exemple une url genre index.php?page=1

et que tu as un switch qui dit que case 1: include 'pageblabla.php';

le nom est pas connu du surfeur.
le probleme d'un site ou tu connais tous les noms de fichiers est que tous les sites ne sont pas bien sécurisés, et qu'un fichier qui normalement doit etre inclu n'est pas sensé etre appellé de facon orpheline (basename pour regler ca, mais combien de personnes le font ? )

enfin jsais pas, c'est une regle quoi, autant faire en sorte que le surfeur en sache le moins sur la facon dont s'execute le script, c'est mieux ainsi, du moins c'est mon point de vue

Commentaire de kiki67100 le 01/05/2008 14:03:06

malalam ,Je suis daccord avec toi si le site en question est bien codé cela ne devraient pas posé de problème de savoir le nom réel. mais dans mon cas les page que ne peuve pas être apeller de facon "orpheline" comme dis willeraser ,J'ai des fonction qui son apeller de le fichier "père" (celui qui inclu) et non dans mes fichier qui son inclu on va dire c'est un peut de "la sécurité par l'obscurité"

Commentaire de malalam le 01/05/2008 14:51:19 administrateur CS

Ne prenez pas l'exemple de sites fonctionnant par inclusions, mais de sites classiques basés juste sur des pages. Je ne vois pas en quoi cela change quelque chose que l'on voit ou non machin.php plutôt que main.php?page=1.
Si le site est mal codé, dans les 2 cas, les problèmes sont les mêmes. Ca n'est pas moins sécurisé de voir le nom des fichiers php utilisés.
Parce que être parano, c'est bien...mais il faut l'être à bon escient : vous ne serez pas plus capable de sécuriser dans un cas que dans l'autre. Et si vous faîtes face à un piratin ayant un meilleur niveau que vous, dans les deux cas, il trouvera la faille. On ne sécurise pas un site pour les utilisateurs lambda, parce qu'eux ne représentent pas une menace : ils ne savent pas comment exploiter une faille.
Un bon piratin le sait, lui...et si vous n'avez pas un bon niveau, dans les deux cas, vous êtes morts.
Et si vous avez un bon niveau...que votre site affiche ou non en clair dans l'url les fichiers php qu'il utilise, ça ne changera rien, c'est le piratin qui est mort.
Bref, un bon piratin verra la lumière dans l'obscurité, croyez-moi...penser que simplement masquer le nom des fichiers utilisé est une sécurité est illusoire dans ce cas.
Il faut bien plus s'intéresser aux injections et autres XSS...et les XSS se basent souvent sur...des POST ou des GET...en se contrefichant éperduement du nom des fichiers que VOUS vous incluez, de manière masquée ou non. Parce que ce ne sont pas VOS scripts qui l'intéressent dans ce cas, mais les siens...à priori, les vôtres ne peuvent pas faire de mal à votre site ;-)

Commentaire de amezghal le 01/05/2008 22:53:29

Salut,
perso j'utilise un tableau + url rewriting:
par exemple:
$pages=array('home','contact','admin');
if(isset($_GET['page']) && in_array($pages, $_GET['page'])){
   require $_GET['page'].'.php';
} else {
   require page par defaut en cas derreur;
}

Commentaire de didoudu17 le 02/05/2008 07:03:15

salut,
pas mal ta technique amezghal je pense que je vais faire pareil c plus pratique

Commentaire de coucou747 le 02/05/2008 15:13:18

amezghal, si tu utilises l'utlrewriting pour tes index.php?page=truc, alors t/as une solution qui t'evites le in_array et qui t'evites bon nombre de XSS :

tu peux simplement interdire l'acces aux pages qui ne viennent pas par rewrite.

Commentaire de kiki67100 le 03/05/2008 18:19:14

Amezghal , tu peut mettre ton array dans le fichier ini aussi qui simplifie l'edite de ton array avec mon code par exemple

Commentaire de emilia123 le 13/05/2008 08:29:38 7/10

bonjour à tous,
Je pense que l'idée est sympa, et change des gros IF ou SWITCH que l'on voit habituellement.
la solution avec un require ou include + file_exists n'est pas suffisante.
si j'appel "index.php?page=admin/.htpasswd" ca va juste inclure le fichier admin/.htpasswd
pourtant file_exists serait utilisé.

faire un include/require directement à partir d'une variable GET ou POST est toujours dangereux.
passer par un traitement intermediaire est nécessaire et ce code est sympa.
Il marche sans modif pour 1 ou 1000 pages (contrairement aux tests via IF ou SWITH)
Il marche avec des ajouts de pages (contrairement aux tests via IF ou SWITH)
Il n'inclus vraiment que ce qu'on laisse include (contrairement aux include/require)

Voila voila
Biz
EM.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Include dans un tableau Array ? [ par hakeem69 ] Bonjour à tous <p class="MsoNormal" style Recherche dans un array [ par Aaron ] Salut à tous et joyeux nöel,J'aimerais savoir s'il est possible de chercher la clé d'un tableau grâce à deux valeurs.Voici mon tableau :Array( [0] Problème Include dans php.ini sous Windows [ par fabienfs ] Bonsoir,J'ai installer php5.2.2 sur mon serveur qui tourne sous Windows 2003 Server, ca fonctionne très bien sauf que j'ai un petit problème avec les fopen ou include pour un array ? [ par midnnight ] Bonjour, j'ai consulté un ancien post ici sur : comment placer une "include" dans un "array" et malheureusement, non seulement le post semble clos, ma Besoin d'aide pour comprendre Array_walk [ par eltyty ] Bonjour, j'ai vu dans google code la ligne suivante : [code=php] array_walk($set, create_function('&$a', 'if(isset($a)): $a = "\'".AddSlashes($a)."\' Class requêtes [ par eltyty ] Bonjour, je souhaiterai avoir votre avis quant à la pertinence de ma classe. Il s'agit d'une classe pour l'insertion dans une table. Je souhaitais ut Probleme de reset sur un array () [ par agparchitecture ] Bonjour à tous, je compte sur vos connaissances pour pouvoir m'éclairer. Mon problème est le suivant: [code=php]<?php $Accept_Lang=explode(',',$_SER include fonctionne pas dans les pdf avec FPDF [ par jmsch57 ] bonjour, je viens de faire un facturier php mysql et là je veux réaliser ma page de sortie en pdf. J'utilise FPDF et je n'arrive pas à faire fonction include dans une page pdf [ par jmsch57 ] bonjour, je n'arrive pas a inclure un fichier dans une page pdf. je teste avec ce petit scripte qui fonctionne sans l'include mais pas avec. quelqu' Problème DAOFactory et consors [ par vlec ] Bonjour, Alors voilà, j'ai un petit problème, non en fait un gros problème. :) Je fais actuellement un site pour une association. Site dans l'ensemb


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,920 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales