Page 1 sur 1

astuce .htaccess - php et inclusions

Posté : 24 janv. 2007, 13:54
par mcorgnet
Hello !

Je travaille avec les inclusions en php. Ma page index sert de carrefour à tout mon programme.

Danger : lorsque quelqu'un s'amuse à taper le lien direct vers une page incluse, il peut accessoirement lire son contenu.

Pour éviter ça, et pour obliger les utilisateurs à passer par la page d'index, mettez le code suivant dans votre htaccess, au niveau de la racine :

Code : Tout sélectionner

<Files *.php> Deny from all </Files> <Files index.php> Allow from all </Files>
Cadeau !

@+++

[edit]
Cette astuce est surtout valable avec l'utilisation des templates. En effet, TOUT le code php est protégé, et le code html ne demande pas de mot de passe à l'accès :d.
[/edit]

Posté : 24 janv. 2007, 15:14
par Rei Itchido
Merci pour cette astuce :)

Par contre, si tu as une page php "de traitement" qui n'est pas incluse par index.php (une page qui traite les données renvoyées par un formulaire par ex), cela pose un problème non?

Posté : 24 janv. 2007, 17:02
par albat
Une autre solution, mais dans le même esprit,
consiste à déposer la page index.php sur la racine de son site
et toutes les autres pages dans un sous-répertoire protégé par un .htaccess. ;)

Avantage : elle sécurise aussi les pages .HTM qui pourrait être incluses...

Posté : 24 janv. 2007, 20:19
par fab
Le problème d'inclusions n'est pas pour autant résolu a 100 %
exemple de code troué
$file = $_GET['file'];
if(isset($_GET['file]) { $inc = $file; } else { $inc = "accueil.php"; }
include($inc);
Avec ça & ton .htaccess ton site ressemblera toujours à un bon gruyere :)

Perso j'utilise un deny from all pour tout les fichiers et je rajoute des exeptions sur les fichiers directement consultables
Et je fais ULTRA attetion au fichier à inclure :)

Cette faille n'est pas rien il m'a permis de pirater pendant 6 mois un abrutis de ma classe que forcement j'aimais pas :)

Posté : 24 janv. 2007, 20:48
par Rei Itchido
Il me semblait bien qu'on en avait déjà parlé :)

http://www.phpfrance.com/forums/viewtopic.php?t=23716

Posté : 25 janv. 2007, 03:23
par Xenon_54
J'ai qu'un fichier index.php et les répertoires css, images, etc. accessible publiquement via HTTP. Le reste se trouve tout dans le répertoire parent, inaccessible via HTTP.

Posté : 07 févr. 2007, 03:04
par stevelace
Personellement, dans mon index je créé une constante ex:
define('protect',true);
if(file_exists('traitement.php')){include_once('traitement.php');}
et dans mon fichier de traitement je met en premiere ligne :
if(!defined('protect')){exit;}

Selon moi c'est assez efficace non ?

Posté : 07 févr. 2007, 13:16
par Hywan
Bonjour !

Sinon si l'on a que quelques pages à enlever, avec les commandes Apache --dans le .htaccess --, on peut faire de la façon suivante :

Code : Tout sélectionner

<FilesMatch "^(index|pingback|autrepage)?\.php$"> deny from all </FilesMatch>
La regex est écrit au pif, mais c'est pour reprendre l'idée de mcorgnet étendue à plusieurs fichiers (limitée à 5 ou 6 grand maximum évidement). Et également pour introduire FilesMatch.

:)