Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 12/12/2013, à 13:49

alfirdaous

Securiser les fichier PHP dans un dossier

Bonjour,

J'ai un dossier "test" qui a 2 fichiers (index.php et head.php), est ce qu'il y a une methode de ne pas permettre l'ouverture du fichier head.php par access direct, par exempe: http://localhost/test/head.php.

Merci a vous

Hors ligne

#2 Le 12/12/2013, à 14:41

ljere

Re : Securiser les fichier PHP dans un dossier

étant débutant en php je dirai que tu peux passer par une authentification pour accéder à cette page


ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon

Hors ligne

#3 Le 12/12/2013, à 14:52

alfirdaous

Re : Securiser les fichier PHP dans un dossier

est ce que vous avez un exemple?

Hors ligne

#4 Le 12/12/2013, à 15:03

ljere

Re : Securiser les fichier PHP dans un dossier

biensur quand je cherche comment faire tel ou tel chose en php je regarde toujours la http://php.net/manual/fr/features.http-auth.php


ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon

Hors ligne

#5 Le 12/12/2013, à 15:17

alfirdaous

Re : Securiser les fichier PHP dans un dossier

je pense que cette methode va bloquer aussi index.php non??

J'ai pas encore teste

Hors ligne

#6 Le 12/12/2013, à 15:31

ljere

Re : Securiser les fichier PHP dans un dossier

non tu ne modifies que head.php
index.php ne subira aucune modification


ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon

Hors ligne

#7 Le 13/12/2013, à 00:41

vince2corte

Re : Securiser les fichier PHP dans un dossier

Salut,
Une méthode indépendante du serveur est de tester quel est le script qui a été lancé dans le fichier "head.php".

if (!eregi("index.php", $_SERVER['PHP_SELF'])) {
	die ("Erreur : vous ne pouvez pas accéder directement à ce fichier...");
}

Ce bout de code oblige le fichier "head.php" à être exécuté via le fichier "index.php" en utilisant un "include" ou un "require" (et leurs variantes "_once").
A noter que dans le bout de code que "eregi" est déprécié, et qu'il vaudrait mieux utiliser un "preg_match", mais j'ai un peu la flemme wink


La liberté commence où l'ignorance finit  - Victor Hugo
i7 2600k - P8Z77-V - NVidia GTX 680 2Go - EXSYS EX-16415 - RAM 24Go - SSD 120Go & 250Go - HD 1To - Moniteur 27'' S27A850D en 2560x1440 - Ubuntu 18.04 LTS 64 bits & 12.04 LTS 64 bits - NAS Synology DS211+ 2x2To RAID 1
Plein de Raspberry 3 B/B+ pour faire des serveurs de données qui dépotent !

Hors ligne

#8 Le 13/12/2013, à 03:50

alfirdaous

Re : Securiser les fichier PHP dans un dossier

je pense que ca serait ainsi:

if (!preg_match("#index.php#", $_SERVER['PHP_SELF'])) {
	die ("Erreur : vous ne pouvez pas accéder directement à ce fichier...");
}

Hors ligne

#9 Le 13/12/2013, à 09:15

bruno

Re : Securiser les fichier PHP dans un dossier

C'est une façon de faire, bien que ce code ne soit pas très propre...

Solution 1 :

dans les fichiers qui peuvent être appelés directement et qui contiennent des instructions include, require, require_once,… :

define('TEST',true)

dans les fichiers qui ne doivent pas être appelés directement (header.php dans ton exemple) :

if (!defined('TEST') {
    header('HTTP/1.0 403 Forbidden');
    exit;
}


Solution 2 (à mon avis, la plus simple et la plus sûre)  :

les fichiers ne devant pas être appelés directement sont placés dans un dossier includes dont l'accès est interdit, soit dans un .htaccess dans le dossier includes :

Deny from all

soit si tu as la main sur le serveur dans la définition du vhost :

<Directory /lechemin/du/site/includes>
    Order deny,allow
    Deny from all
</Directory>

Dernière modification par bruno (Le 13/12/2013, à 09:16)

Hors ligne

#10 Le 13/12/2013, à 09:56

mazarini

Re : Securiser les fichier PHP dans un dossier

Bonjour,

Il me semble plus judicieux de mettre les fichiers ne devant pas être appelé directement en dehors des répertoires accessible via le web et de jouer sur l'include_path pour les inclure.
Une autre possibilité (moins bien) est de les stocker dans un sous-répertoire protégé par un .htaccess.


S'il existait une école de la politique, les locaux devraient être édifiés rue de la Santé. Les élèves pourraient s'habituer. (Pierre Dac)

Hors ligne

#11 Le 13/12/2013, à 16:32

alfirdaous

Re : Securiser les fichier PHP dans un dossier

@ljere: cette methode ne marche pas

@vince2corte: celle-ci marche bien en utilisant preg_match

@bruno: la premiere methode ne marche, pour la 2eme, j'ai access sur le serveur, est ce qu'on peut la mettre en .htaccess dans le repertoire qu'on voulait proteger, j'ai teste mais ca marche pas:

<Directory /home/alfirdaous//Tests/PHP/x>
    Order deny,allow
    Deny from all
</Directory>

"x" est le repertoire ou je mets les fichiers a proteger

@mazarini: j'ai pas compris pour votre premiere solution, pour la 2eme, je pense que c'est la meme proposee par ljere, mais quand j'appelle index.php je recois la fenetre d'authentification, sinon avec deny allow, ca marche pas, peut etre je me trompe du code propose par bruno

Dernière modification par alfirdaous (Le 13/12/2013, à 16:32)

Hors ligne

#12 Le 13/12/2013, à 17:08

mazarini

Re : Securiser les fichier PHP dans un dossier

La solution de Bruno ressemble effectivement sachant que la modification du vhost est mieux que l'ajout du .htaccess. Par contre il faut les mettre dans un sous-répertoire, pas dans le même qu'index.php.

Pour ma première solution, tu modifies le fichier php.ini pour mettre un répertoire en plus.
include_path = "."
devient
include_path = ".:/le chemin de ton répertoire"
(pas sur entre : et ; pour les séparateurs.)
Et ensuite, tu copies les fichiers à inclure dans ce répertoire.

Par exemple, si ton site est dans /home/alfirdaous/www
Tu crées un répertoire /home/alfirdaous/include et tu déplace head.php dans ce répertoire.
tu mets : include_path = "/home/alfirdaous/include" dans le php.ini
Ensuite tu peux faire les includes comme si le fichier était dans le répertoire courant (c'est le . dans le include_path qui te permettait de trouver le fichier dans le répertoire courant jusqu'à maintenant) .


S'il existait une école de la politique, les locaux devraient être édifiés rue de la Santé. Les élèves pourraient s'habituer. (Pierre Dac)

Hors ligne

#13 Le 13/12/2013, à 20:36

vince2corte

Re : Securiser les fichier PHP dans un dossier

Heureux d'avoir pu être utile.
La première méthode de bruno est sympa car elle permet de créer des "familles" de fichiers appelant autorisés très simplement en fixant les valeur de la constante. Ça peut être très utile.
Pour la seconde, bien qu'elle soit probablement techniquement très sûre, dans la pratique, quand on gère un site composé de plusieurs milliers de fichers php distribués en modules, ça devient très lourd de couper toute l'arborescence en deux. D'où le petit code pas très propre;)
Petite remarque (qui était aussi valable pour mon code d'ailleurs) : il vaut mieux utiliser cette expression rationnelle

if (!preg_match("#^index.php$#", $_SERVER['PHP_SELF'])) {
	die ("Erreur : vous ne pouvez pas accéder directement à ce fichier...");
}

ou directement

if ("index.php" != $_SERVER['PHP_SELF']) {
	die ("Erreur : vous ne pouvez pas accéder directement à ce fichier...");
}

pour éviter qu'un fichier du genre "old-index.php" ne soit autorisé (à moins que ce soit volontaire pour créer des séries de fichiers)...

Dernière modification par vince2corte (Le 13/12/2013, à 20:41)


La liberté commence où l'ignorance finit  - Victor Hugo
i7 2600k - P8Z77-V - NVidia GTX 680 2Go - EXSYS EX-16415 - RAM 24Go - SSD 120Go & 250Go - HD 1To - Moniteur 27'' S27A850D en 2560x1440 - Ubuntu 18.04 LTS 64 bits & 12.04 LTS 64 bits - NAS Synology DS211+ 2x2To RAID 1
Plein de Raspberry 3 B/B+ pour faire des serveurs de données qui dépotent !

Hors ligne

#14 Le 13/12/2013, à 21:42

mazarini

Re : Securiser les fichier PHP dans un dossier

En fait, lorsque l'on utilise l'include_path, on a très peu de fichiers dans l’arborescence du site. On a déjà moins besoin de faire des sous-répertoires par modules, enfin si, on a le répertoire du module pour les include et des éventuellement des fichiers pour l'affichage des modules.

Grace à l'include_path, il n'est plus besoin de se poser des questions en fonction du répertoire ou sous-répertoire pour faire les include.

Pour symfony2, on utilise qu'un seul fichier dans la partie web (+ sa version dev). Wordpress doit utiliser 2 fichiers principaux (+ quelques fichiers pour de l'ajax).

A noter que l'on peut définir l'include_path dans le vhost pour en avoir un différent pour chaque host.


S'il existait une école de la politique, les locaux devraient être édifiés rue de la Santé. Les élèves pourraient s'habituer. (Pierre Dac)

Hors ligne

#15 Le 14/12/2013, à 03:45

alfirdaous

Re : Securiser les fichier PHP dans un dossier

je vais tester les methodes, pour la 1ere solution de bruno, ca ne marchait pas, et je trouve que c'est un peu lourd de mettre le code sur tous les fichiers

@vince2corte: oui, il fallait mettre un $ et ^, j'ai juste propose cette de preg_match au lieu de eregi, merci pour la remarque

Dernière modification par alfirdaous (Le 14/12/2013, à 03:46)

Hors ligne

#16 Le 15/12/2013, à 10:30

alfirdaous

Re : Securiser les fichier PHP dans un dossier

mazarini a écrit :

Il me semble plus judicieux de mettre les fichiers ne devant pas être appelé directement en dehors des répertoires accessible via le web et de jouer sur l'include_path pour les inclure.

J'ai mis de meme:

include_path = ".:/home/alfirdaous/Tests/PHP/x";

et j'ai mis ce code:

index.php:

<?php
echo 'Start';

echo '<br />';

require_once 'head.php';

echo '<br />';

echo 'end';

?>

head.php (sous le repertoire x):

Include me

resultat:

Start
Include me
end

et j'ai mis le code donne par bruno en vhost:

<Directory /home/alfirdaous/Tests/PHP/x/>
                Order deny,allow
                 Deny from all
        </Directory>

resultat lors de l'access au repertoire "x":

Forbidden

You don't have permission to access /Tests/PHP/x/ on this server.

Questions:
1- C'est quoi le bon principe d'utilise include_path?
2- Et si on veut mettre mettre plusieurs include_path?
3- Et si on veut proteger plusieurs repertoires par le code de directiry vhost, on cree pour chacune ou bien on les rassemble?

merci a vous

Hors ligne

#17 Le 15/12/2013, à 10:57

bruno

Re : Securiser les fichier PHP dans un dossier

Ce n'est pas normal que tu aies une erreur 403 (Forbidden) et si tu utilises ma solution tu n'as pas besoin de définir inculde_path (ça c'est pour la solution de mazarini avec les includes en dehors de la racine du site)

Si la racine de ton vhost est /home/alfirdaous/Tests/PHP
index.php doit se trouver à la racine avec comme code :

require_once 'x/head.php';

et header.php dans le dossier protégé x

Hors ligne

#18 Le 15/12/2013, à 11:04

alfirdaous

Re : Securiser les fichier PHP dans un dossier

bruno a écrit :

Ce n'est pas normal que tu aies une erreur 403 (Forbidden)

Je devais avoir quoi exactement


bruno a écrit :

avec les includes en dehors de la racine du site

la racine du site est:

/home/alfirdaous/Tests/

c'est cette partie que j'ai pas compris, voici l'arborescence du site:

/home/alfirdaous/Tests/PHP
$ ls
index.php
x

et dans "x", j'ai head.php

Hors ligne

#19 Le 15/12/2013, à 11:42

bruno

Re : Securiser les fichier PHP dans un dossier

Pardon j’avais mal lu. L'erreur 403 quand tu essaies d’accéder directement au répertoire x est normale.

Hors ligne

#20 Le 15/12/2013, à 12:23

alfirdaous

Re : Securiser les fichier PHP dans un dossier

bruno a écrit :

Pardon j’avais mal lu. L'erreur 403 quand tu essaies d’accéder directement au répertoire x est normale.

oui c'est ca smile

alfirdaous a écrit :

Questions:
1- C'est quoi le bon principe d'utilise include_path?
2- Et si on veut mettre mettre plusieurs include_path?
3- Et si on veut proteger plusieurs repertoires par le code de directiry vhost, on cree pour chacune ou bien on les rassemble?

Hors ligne

#21 Le 15/12/2013, à 12:30

ljere

Re : Securiser les fichier PHP dans un dossier


ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon

Hors ligne

#22 Le 16/12/2013, à 01:58

alfirdaous

Re : Securiser les fichier PHP dans un dossier

merci ljere, je vais voir la doc:

Et si on veut proteger plusieurs repertoires par le code de directiry vhost, on cree pour chacune ou bien on les rassemble?

Hors ligne