commit 9eefa2c258e3cca7fff8fe193b6fcf551fd08121
parent 0314c47a415e9427deb07b9969d9a33afc74c9a1
Author: Georges Dupéron <jahvascriptmaniac+github@free.fr>
Date: Wed, 23 Jun 2010 19:03:01 +0200
Un (tout petit peu) peu de sécurité sur les chemins.
Diffstat:
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/controleur/page.php b/controleur/page.php
@@ -4,9 +4,12 @@ require_once("config.php");
// Protocole : http://site/actualités/?nouveau=Le%20titre
-// Invariants de sécurité :
+// SECURITE : Invariants de sécurité :
// Page::chemin ne contient jamais de chaîne '../' ou autres bizarreries des chemins de fichiers.
// Donc on peut concaténer Page::chemin à un chemin dans le système de fichiers et être sûr d'être dans un sous-dossier.
+// TODO : Lors de la construction d'un chemin, tous les composants doivent être nettoyés.
+
+// TODO : créer une classe chemin_page
class Page {
// article/prop_article
@@ -19,7 +22,12 @@ class Page {
public function __construct($chemin) {
// SECURITE : chemin doit être un sous-dossier de .../modele/
- $this->chemin = $chemin;
+ $this->chemin = nettoyer_chemin($chemin);
+ }
+
+ // Nettoie un chemin de page pour qu'il respecte l'invariant de sécurité.
+ public static function nettoyer_chemin($chemin) {
+ return $chemin;
}
// Renvoie le chemin de la page dans le système de fichiers
@@ -39,11 +47,11 @@ class Page {
}
public function enfant($nom) {
- return new Page($this->chemin . '/' . $nom); // TODO
+ return new Page(nettoyer_chemin($this->chemin) . '/' . nettoyer_chemin($nom));
}
public function parent() {
- return new Page($this->chemin . '/..'); // TODO
+ return new Page(nettoyer_chemin($this->chemin) . '/..'); // TODO
}
public function nouveau($nom) {