[php] problème conceptuel
Résolu/Fermé
gryzzly
Messages postés
4608
Date d'inscription
lundi 7 novembre 2005
Statut
Contributeur
Dernière intervention
24 octobre 2020
-
2 juin 2007 à 02:10
gryzzly Messages postés 4608 Date d'inscription lundi 7 novembre 2005 Statut Contributeur Dernière intervention 24 octobre 2020 - 3 juin 2007 à 22:05
gryzzly Messages postés 4608 Date d'inscription lundi 7 novembre 2005 Statut Contributeur Dernière intervention 24 octobre 2020 - 3 juin 2007 à 22:05
5 réponses
ACNet
Messages postés
64
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
24 novembre 2007
14
2 juin 2007 à 11:20
2 juin 2007 à 11:20
Bonjour,
C'est faux, rien ne t'oblige à spécifier chaque page autorisée :
En fait, il y a quelques temps, les concepteurs de sites peu soucieux de la sécurité utilisaient une technique qui avait l'avantage d'être hyper simple :
ils passaient en paramètre d'url : ?page=nomdepage.php
Ensuite, ils n'avaient plus qu'à faire un include($_GET["page"]); et le tour était joué.
En effet, c'était une énorme faille puisque n'importe qui pouvait alors ouvrir n'importe quel fichier. Et pour peu que l'admin se soit amusé à autoriser tous les fichiers du serveur en lecture, ca devenait vraiment catastrophique ;)
En fait, la solution la plus sûre est effectivement de n'autoriser que certains fichiers à l'aide d'un switch par exemple.
switch($_GET['page']){
case 'accueil':
include('accueil.php');
break;
case 'contact':
include('contact.php');
break;
default:
include('accueil.php');
break
}
C'est sûr, c'est suffisamment restrictif.
Tu peux cependant choisir 2 autres méthodes :
faire une requête SQL pour voir si le nom est autorisé, ainsi que la page à include. Ca a le mérite d'être tout aussi restrictif, et editable en ligne, mais assez lourd niveau charge bd ...
N'autoriser que certains fichiers :
Tu peux très bien n'autoriser que certains types de fichiers, par exemple ceux qui sont situés dans un dossier en forcant le chemin d'accès, et en supprimant tous les "." et "/" passés dans l'url , ou alors, par exemple, ajouter préfixes/suffixes à tous les fichiers pouvant être ouverts :
include('page-'.$page.'.public.php');
Ainsi, les fichiers ne correspondant pas à la structure
page-nomdepage.public.php ne pourront pas être ouverts.
En esperant avoir répondu à ta question.
Stephane
C'est faux, rien ne t'oblige à spécifier chaque page autorisée :
En fait, il y a quelques temps, les concepteurs de sites peu soucieux de la sécurité utilisaient une technique qui avait l'avantage d'être hyper simple :
ils passaient en paramètre d'url : ?page=nomdepage.php
Ensuite, ils n'avaient plus qu'à faire un include($_GET["page"]); et le tour était joué.
En effet, c'était une énorme faille puisque n'importe qui pouvait alors ouvrir n'importe quel fichier. Et pour peu que l'admin se soit amusé à autoriser tous les fichiers du serveur en lecture, ca devenait vraiment catastrophique ;)
En fait, la solution la plus sûre est effectivement de n'autoriser que certains fichiers à l'aide d'un switch par exemple.
switch($_GET['page']){
case 'accueil':
include('accueil.php');
break;
case 'contact':
include('contact.php');
break;
default:
include('accueil.php');
break
}
C'est sûr, c'est suffisamment restrictif.
Tu peux cependant choisir 2 autres méthodes :
faire une requête SQL pour voir si le nom est autorisé, ainsi que la page à include. Ca a le mérite d'être tout aussi restrictif, et editable en ligne, mais assez lourd niveau charge bd ...
N'autoriser que certains fichiers :
Tu peux très bien n'autoriser que certains types de fichiers, par exemple ceux qui sont situés dans un dossier en forcant le chemin d'accès, et en supprimant tous les "." et "/" passés dans l'url , ou alors, par exemple, ajouter préfixes/suffixes à tous les fichiers pouvant être ouverts :
include('page-'.$page.'.public.php');
Ainsi, les fichiers ne correspondant pas à la structure
page-nomdepage.public.php ne pourront pas être ouverts.
En esperant avoir répondu à ta question.
Stephane
Dalida
Messages postés
6728
Date d'inscription
mardi 14 mai 2002
Statut
Contributeur
Dernière intervention
11 janvier 2016
921
2 juin 2007 à 12:04
2 juin 2007 à 12:04
salut,
me suis posé et me pose encore la même question que Gryzzly.
j'ai opté pour une page index qui inclut des contenus différents selon chaque page.
en gros ma page index ressemble à :
<?php
switch (sur le $_GET)
--> $selected_page = int ;
if (utilisateur identifié)
--> confirmation ou infirmation du choix
?>
<html>
<head></head>
<body>
<div>page header</div>
<?php
include ('pages/page_selectionnee.html');
?>
<div>page footer</div>
</body>
</html>
je ne sais pas si cela est très sécurisé… mais comme toi je pensais faire de la ré-écriture d'URL pour le référencement et la "propreté".
me suis posé et me pose encore la même question que Gryzzly.
j'ai opté pour une page index qui inclut des contenus différents selon chaque page.
en gros ma page index ressemble à :
<?php
switch (sur le $_GET)
--> $selected_page = int ;
if (utilisateur identifié)
--> confirmation ou infirmation du choix
?>
<html>
<head></head>
<body>
<div>page header</div>
<?php
include ('pages/page_selectionnee.html');
?>
<div>page footer</div>
</body>
</html>
je ne sais pas si cela est très sécurisé… mais comme toi je pensais faire de la ré-écriture d'URL pour le référencement et la "propreté".
gryzzly
Messages postés
4608
Date d'inscription
lundi 7 novembre 2005
Statut
Contributeur
Dernière intervention
24 octobre 2020
1 334
2 juin 2007 à 13:07
2 juin 2007 à 13:07
C'est faux, rien ne t'oblige à spécifier chaque page autorisée : En fait, la solution la plus sûre est effectivement de n'autoriser que certains fichiers à l'aide d'un switch par exemple.
au final, c'est bien ce que je disais, on est obligé de vérifier l'autorisation, donc créer l'autorisation, donc mettre a jour le fichier correspondant et donc passer par le ftp... (ma solution 1)
Tu peux cependant choisir 2 autres méthodes : faire une requête SQL pour voir si le nom est autorisé, ainsi que la page à include. Ca a le mérite d'être tout aussi restrictif, et editable en ligne, mais assez lourd niveau charge bd ...
lourd par ce que ? en raison de la requete supplémentaire de vérification ? d'autre part, je ne vois pas encore trop comment on met en place cela... cela revient à faire un "moteur de recherche" qui n'affiche certes pas de résultats, mais dont on traite le résulatt pour le comparer à la variable appelée, et je ne suis pas encore assez au point.
N'autoriser que certains fichiers : Tu peux très bien n'autoriser que certains types de fichiers, par exemple ceux qui sont situés dans un dossier en forcant le chemin d'accès, et en supprimant tous les "." et "/" passés dans l'url , ou alors, par exemple, ajouter préfixes/suffixes à tous les fichiers pouvant être ouverts : include('page-'.$page.'.public.php');
c'est lourd comme méthode, noms de fichiers à extension, et passage par le ftp pour upload des pages...
je reste coi :'( ca ne m'a pas trop aidé, mais merci pour les infos qui donnent quelques pistes !
ACNet
Messages postés
64
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
24 novembre 2007
14
3 juin 2007 à 21:14
3 juin 2007 à 21:14
Bonjour,
Selon l'architecture du site, tu n'as pas à passer par ftp pour uploader les pages. Par exemple pour un site basique proposant une dizaine d'articles , et une page de contact, tu devras uploader la page de contact, et la page de gabarit des articles. Tu mettras le contenu des articles en base de données.
Quelque soit l'article à lire, tu charges la meme page qui lis l'article depuis la base de données. Pour créer un article il te suffit de créer un nouvel enregistrement dans ta base de donnée.
Biensûr rien ne t'oblige à faire comme ca, mais c'est la méthode la plus couramment employée. Tu n'as besoin de faire des uploads que dans le cadre de modifications structurelles majeures.
Stephane.
Selon l'architecture du site, tu n'as pas à passer par ftp pour uploader les pages. Par exemple pour un site basique proposant une dizaine d'articles , et une page de contact, tu devras uploader la page de contact, et la page de gabarit des articles. Tu mettras le contenu des articles en base de données.
Quelque soit l'article à lire, tu charges la meme page qui lis l'article depuis la base de données. Pour créer un article il te suffit de créer un nouvel enregistrement dans ta base de donnée.
Biensûr rien ne t'oblige à faire comme ca, mais c'est la méthode la plus couramment employée. Tu n'as besoin de faire des uploads que dans le cadre de modifications structurelles majeures.
Stephane.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
gryzzly
Messages postés
4608
Date d'inscription
lundi 7 novembre 2005
Statut
Contributeur
Dernière intervention
24 octobre 2020
1 334
3 juin 2007 à 22:05
3 juin 2007 à 22:05
je crois avoir saisi le principe... en revanche, je sens que je vais galérer sur la mise en place :ooo