ZerooCool / phpsecinfo

Versions 2007 -> 2019
2 stars 1 forks source link

is_root_read - Read permission enabled. You should under normal instances never allow Reading of the root ('/') #32

Open ZerooCool opened 4 years ago

ZerooCool commented 4 years ago

is_root_read | Notice Read permission enabled. You should under normal instances never allow Reading of the root ('/').

Valeur actuelle Read-Only
Valeur recommandée None

How to and where change this value ?

ZerooCool commented 4 years ago

Dans la configuration de PHP, renseigner la valeur de open_basedir vers le dossier racine de notre site. open_basedir = /home/UTILISATEUR/ALIEN/GIT/SITES

Le test passe au vert.

Par contre, je me prend trois Warning que je n'avais pas, maintenant que j'ai activé le open_basedir :

open_basedir = /home/UTILISATEUR/ALIEN/GIT/SITES

Warning: is_writable(): open_basedir restriction in effect. File(/) is not within the allowed path(s): (/home/UTILISATEUR/ALIEN/GIT/SITES) in /home/UTILISATEUR/ALIEN/GIT/SITES/phpsecinfo/2019-phpsecinfo-v3.0.1/PhpSecInfo/Test/Dir/is_root_read.php on line 39

Warning: is_readable(): open_basedir restriction in effect. File(/) is not within the allowed path(s): (/home/UTILISATEUR/ALIEN/GIT/SITES) in /home/UTILISATEUR/ALIEN/GIT/SITES/phpsecinfo/2019-phpsecinfo-v3.0.1/PhpSecInfo/Test/Dir/is_root_read.php on line 41

Warning: fileperms(): open_basedir restriction in effect. File(/var/lib/php/sessions) is not within the allowed path(s): (/home/UTILISATEUR/ALIEN/GIT/SITES)

C'est le deuxième qui m'étonne, puisqu'il me dit la qu'il est readable, alors que le test me dit que non.

Voir ce que donne le retour de cette recherche via Google : Warning: is_readable(): open_basedir restriction in effect. File(/) is not within the allowed path(s):

ZerooCool commented 4 years ago

Est ce que c'est moi qui n'ai pas compris le test, et, qu'en fait, c'est la racine du système linux qui est testé ? ( / ) et de ce fait, vu que open_basedir est fixé, effectivement, je ne peux que obtenir un warning, et, cela voudrait dire effectivement que tout est ok ?

Malgré tout, ce test me semble foireux quelque part, car, il me semble q'une application bien conçue en PHP ne devrait pas retourner de Warning, même lors d'un test de droits.

Le test devrait donc passer au vert, ça, ça semble bon, mais, PHP ne devrait pas afficher de Warning si l'affichage des erreurs est activé pour le front end.

ZerooCool commented 4 years ago

Le warning c'est php qui signale que le script tente de lire dans "/" et que ce n'est pas autorisé par la directive open_basedir (et heureusement !).

De mon point de vue, c'est probablement normal. PHP tente la lecture lors de l'exécution du test et c'est ça qui déclenche le warning.

Je trouve ça dérangeant étrange comme comportement, car, je suppose que l'on devrait pouvoir tester, sans déclencher l'affichage de l'erreur, ce qui n'est absolument pas certain dans ce contexte.

Peut être y aurait t'il moyen de capturer le warning ? Absolument pas certain non plus, cela voudrait dire que toutes les tentatives de hack pourraient être silencieuses, sans laisser aucun log.

Je vais considérer cela comme résolu, car, dans les tests complémentaires, normalement, phpsecinfo demande la désactivation des erreurs en front, donc, de toute façon, nous ne sommes pas censé avoir les alertes d'affichées en front.

Le test est donc au vert, et, c'est ce qui est le plus important ici.

ZerooCool commented 4 years ago

Noter que le warning devrait pouvoir être capturé avec un try catch.

/PhpSecInfo/Test/Dir/is_root_read.php

Les fonctions is_writable et is_readable lèvent une exception en cas d'échec ce qui est le cas si l'accès est refusé par l'open_basedir.

Il faudrait encapsuler chacun de ces tests dans un try catch pour capturer cette exception correctement, et considérer l'accès à false.

Exemple : https://stackoverflow.com/questions/1241728/can-i-try-catch-a-warning Exemple : https://www.guru99.com/error-handling-and-exceptions.html

@suivre

ZerooCool commented 4 years ago

5aea43f5eb3ab943b7ad01d06f10861644a82815 ab926e9eb0157b0bcdf46f40e9ae758781749cc4

ZerooCool commented 4 years ago

Exemples une fois open_basedir défini, si des fichiers ne sont pas accessibles.

YOU DO NOT PUT THIS INTO YOUR HTACCESS BUT RATHER INTO YOUR APACHE CONFIG FILE.

Mettre en place une exception depuis la configuration de Apache2

<DirectoryMatch "/home/sites/site81/">
    php_admin_value open_basedir "/home/sites/site81/:/tmp/:/"
</DirectoryMatch>

Configuration de PHP depuis php.ini (Exemple) open_basedir = /srv/http/:/home/:/tmp/:/usr/share/pear/:/usr/share/webapps/:/etc/webapps/:/run/media/andrew/ext4/protected

Modifier php_value :

<IfModule mod_php5.c>
  php_value include_path ".:/usr/local/lib/php"
  php_admin_flag engine on
</IfModule>

https://www.php.net/manual/en/configuration.changes.php

Exemple concret proche de la situation lors du test de phpsecinfo en local, avec Apache2.4 et PHP7.2 par défaut :

A PHP Error was encountered
Severity: Warning
Message: is_dir(): open_basedir restriction in effect. File(/var/lib/php/session) is not within the allowed path(s): (/home/www/vhosts/example.com/:/tmp/)

Below is an example of including the directory /var/lib/php/session to open_basedir :

{WEBSPACEROOT}{/}{:}{TMP}{/}{:}/var/lib/php/session Source : https://support.plesk.com/hc/en-us/articles/115000278993-A-website-hosted-in-Plesk-is-not-accessible-open-basedir-restriction-in-effect-File-is-not-within-the-allowed-path-s-

Source complémentaire : https://www.templatemonster.com/help/open_basedir-restriction-in-effect-filex-is-not-within-the-allowed-paths-y.html Source complémentaire : https://forum.joomla.org/viewtopic.php?t=710302

@Suivre