security sync with EN (#1361)

This commit is contained in:
David CARLIER
2024-08-26 21:02:24 +01:00
committed by GitHub
parent 55c0f672be
commit 3ad1eef323

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: c5d92fd7127e059d448d43ba339f19956f83b05a Maintainer: yannick Status: ready -->
<!-- EN-Revision: 91570644fbbe4d23e79908e1a04c4c4d003fe587 Maintainer: yannick Status: ready -->
<!-- Reviewed: yes -->
<chapter xml:id="security.filesystem" xmlns="http://docbook.org/ns/docbook">
@@ -16,7 +16,7 @@
<simpara>
Puisque <acronym>PHP</acronym> a été fait pour permettre aux utilisateurs
d'accéder aux fichiers, il est possible de créer un
script <acronym>PHP</acronym> qui vous permet de lire des fichiers tels que /etc/password,
script <acronym>PHP</acronym> qui vous permet de lire des fichiers tels que <filename>/etc/password</filename>,
de modifier les connexions ethernet, lancer des impressions de documents,
etc. Cela implique notamment que vous devez vous assurer que les fichiers
manipulés par les scripts sont bien ceux qu'il faut.
@@ -35,6 +35,7 @@
<programlisting role="php">
<![CDATA[
<?php
// Efface un fichier dans un dossier racine
$username = $_POST['user_submitted_name'];
$userfile = $_POST['user_submitted_filename'];
@@ -43,6 +44,7 @@ $homedir = "/home/$username";
unlink("$homedir/$userfile");
echo "Ce fichier a été effacé !";
?>
]]>
</programlisting>
@@ -59,7 +61,8 @@ echo "Ce fichier a été effacé !";
<programlisting role="php">
<![CDATA[
<?php
// efface un fichier n'importe où sur le disque dur,
// Efface un fichier n'importe où sur le disque dur,
// où l'utilisateur PHP a accès. Si PHP a un accès root :
$username = $_POST['user_submitted_name']; // "../etc"
$userfile = $_POST['user_submitted_filename']; // "passwd"
@@ -68,6 +71,7 @@ $homedir = "/home/$username"; // "/home/../etc"
unlink("$homedir/$userfile"); // "/home/../etc/passwd"
echo "Ce fichier a été effacé !";
?>
]]>
</programlisting>
@@ -93,6 +97,7 @@ echo "Ce fichier a été effacé !";
<programlisting role="php">
<![CDATA[
<?php
// Efface un fichier sur le disque où l'utilisateur a le droit d'aller
$username = $_SERVER['REMOTE_USER']; // utilisation d'un mécanisme d'identification
$userfile = basename($_POST['user_submitted_filename']);
@@ -105,6 +110,7 @@ if (file_exists($filepath) && unlink($filepath)) {
} else {
$logstring = "Échec lors de l'effacement de $filepath\n";
}
$fp = fopen("/home/logging/filedelete.log", "a");
fwrite($fp, $logstring);
fclose($fp);
@@ -124,6 +130,7 @@ echo htmlentities($logstring, ENT_QUOTES);
<programlisting role="php">
<![CDATA[
<?php
$username = $_SERVER['REMOTE_USER']; // utilisation d'un mécanisme d'identification
$userfile = $_POST['user_submitted_filename'];
$homedir = "/home/$username";
@@ -134,7 +141,8 @@ if (!ctype_alnum($username) || !preg_match('/^(?:[a-z0-9_-]|\.(?!\.))+$/iD', $us
die("Mauvais utilisateur/nom de fichier");
}
//etc...
// etc...
?>
]]>
</programlisting>
@@ -166,10 +174,11 @@ if (!ctype_alnum($username) || !preg_match('/^(?:[a-z0-9_-]|\.(?!\.))+$/iD', $us
<programlisting role="php">
<![CDATA[
<?php
$file = $_GET['file']; // "../../etc/passwd\0"
if (file_exists('/home/wwwrun/'.$file.'.php')) {
if (file_exists('/home/wwwrun/' . $file . '.php')) {
// file_exists retournera true sachant que le fichier /home/wwwrun/../../etc/passwd existe
include '/home/wwwrun/'.$file.'.php';
include '/home/wwwrun/' . $file . '.php';
// le fichier /etc/passwd sera inclu
}
?>
@@ -186,6 +195,7 @@ if (file_exists('/home/wwwrun/'.$file.'.php')) {
<programlisting role="php">
<![CDATA[
<?php
$file = $_GET['file'];
// Whitelisting possible values
@@ -193,11 +203,12 @@ switch ($file) {
case 'main':
case 'foo':
case 'bar':
include '/home/wwwrun/include/'.$file.'.php';
include '/home/wwwrun/include/' . $file . '.php';
break;
default:
include '/home/wwwrun/include/main.php';
}
?>
]]>
</programlisting>