Différences
Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
| php:securisation_open_basedir [2011/08/27 02:05] – import - création Anael MOBILIA | php:securisation_open_basedir [2014/05/27 03:32] (Version actuelle) – modification externe 127.0.0.1 | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | <style float-right> | + | <style float-right> |
| - | <style float-left> | + | <style float-left> |
| - | ====== | + | ====== |
| // | // | ||
| - | <note tip>Présentation rapide.</ | + | <note tip>Explication de l’intérêt de l' |
| < | < | ||
| - | * Aucun prérequis pour ce tutoriel. | + | * [[php: |
| + | * [[apache: | ||
| </ | </ | ||
| \\ | \\ | ||
| - | ===== grand1 | + | ===== Faille de sécurité |
| - | lorem ipsum | + | Mon serveur web est opérationnel, |
| + | * http:// | ||
| + | * http:// | ||
| - | \\ | ||
| - | ===== Liens ===== | ||
| - | * [[.:|Retour à la liste des tutoriels XXX]] | ||
| - | * [[:|Retour à la liste des tutoriels]] | ||
| - | ++__But : Mettre en place la directive [PHP|tag: | + | Chacun des deux sites doit-être indépendant : comme deux maisons, on ne rentre pas sans être invité |
| - | %%% | + | |
| - | !!!! I) Faille de sécurité | + | |
| - | Le serveur marche sans soucis, et j' | + | |
| - | * http:// | + | |
| - | * http:// | + | |
| - | Chacun des deux sites (même si le second n'est qu'une bête page html :-p) doit-être indépendant : comme deux chambres séparées, on ne rentre pas chez l' | + | |
| - | %%%Hors, par défaut, je peux accéder avec un script PHP à n' | + | |
| - | %%%Une proof of concept très simple : | + | |
| - | ///[php] | + | |
| - | <?php | + | |
| - | $f = fopen('/ | + | |
| - | echo fread($f, 150); | + | |
| - | fclose($f); | + | |
| - | ?> | + | |
| - | /// | + | |
| - | Retourne : | + | |
| - | ///[html] | + | |
| - | < | + | |
| - | < | + | |
| - | </ | + | |
| - | /// | + | |
| - | C'est quand même gênant, d' | + | |
| - | !!!! II) Correctif | + | Or, par défaut, je peux accéder avec un script PHP à n'importe qu'elle page ! |
| - | Fort heureusement, nous pouvons réduire l' | + | |
| - | %%% Direction le fichier de config Apache de chaque site : | + | |
| - | ///[bash] | + | |
| - | nano / | + | |
| - | /// | + | |
| - | On y ajoute l' | + | |
| - | /// | + | |
| - | < | + | |
| - | php_admin_value open_basedir / | + | |
| - | </ | + | |
| - | /// | + | |
| - | Recharge de la config Apache | + | |
| - | /// | + | |
| - | service apache2 reload | + | |
| - | /// | + | |
| - | Et le tour est joué :) | + | |
| - | %%%Afin de s'en assurer, on relance le script | + | |
| - | /// | + | |
| - | [Sun Jun 20 02:21:23 2010] [error] [client xx.xxx.xxx.xxx] | + | |
| - | /// | + | |
| - | Il faut configurer | + | Voici un script permettant d' |
| - | %%%Cette manip permet de parer à un très grand nombre d' | + | <code php><? |
| - | %%%Note : Suite à une demande sur IRC, si on souhaite préciser | + | $f = fopen('/ |
| - | %%%Exemple : | + | echo fread($f, 150); |
| - | ///[apache] | + | fclose($f); |
| - | | + | ?></ |
| - | php_admin_value open_basedir / | + | |
| - | </ | + | Ce script exécuté depuis www.anael.eu retourne le contenu de la page d' |
| - | /// | + | <code html>< |
| + | < | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | Il s'agit d'une faille de sécurité importante : que se passerait-il si j' | ||
| + | |||
| + | |||
| + | ===== Correctif ===== | ||
| + | PHP comporte une directive de configuration permettant de limiter les répertoires auxquels un script peut avoir accès ! | ||
| + | |||
| + | Pour ce faire, il faut éditer le fichier de configuration Apache du domaine | ||
| + | <code bash> | ||
| + | |||
| + | Et définir un répertoire dans l'arborescence | ||
| + | <code apache>< | ||
| + | php_admin_value open_basedir / | ||
| + | </ | ||
| + | |||
| + | Rechargement de la config Apache | ||
| + | <code bash> | ||
| + | |||
| + | La configuration de PHP empêche maintenant de remonter dans l' | ||
| + | |||
| + | < | ||
| + | |||
| + | Afin de s'en assurer, on relance le script PoC : | ||
| + | <code apache> | ||
| + | |||
| + | <note important> | ||
| + | |||
| + | Cette configuration | ||
| + | |||
| + | < | ||
| + | < | ||
| + | php_admin_value open_basedir / | ||
| + | </ | ||
| + | </note> | ||
| + | |||
| + | \\ | ||
| + | ===== Liens ===== | ||
| + | * [[.:|Retour à la liste des tutoriels PHP]] | ||
| + | * [[:|Retour à la liste des tutoriels]] | ||