Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions security/apache.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: ab6785b01ce1006e3a9761988575289f40c9b678 Maintainer: yannick Status: ready -->
<!-- Reviewed: yes Maintainer: pmartin -->
<!-- EN-Revision: f5b71e9150fddd14fa56c3c8f7197ef08e966c0b Maintainer: yannick Status: ready -->

<chapter xml:id="security.apache" xmlns="http://docbook.org/ns/docbook">
<title>Installé en tant que module Apache</title>
Expand Down
4 changes: 1 addition & 3 deletions security/cgi-bin.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 330a38c4d45556b49e06ebe6d39e0e311534cd8c Maintainer: lacatoire Status: ready -->
<!-- Reviewed: yes Maintainer: pmartin -->
<!-- EN-Revision: f5b71e9150fddd14fa56c3c8f7197ef08e966c0b Maintainer: lacatoire Status: ready -->

<chapter xml:id="security.cgi-bin" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Binaires CGI</title>
Expand Down
4 changes: 1 addition & 3 deletions security/current.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 96c9d88bad9a7d7d44bfb7f26c226df7ee9ddf26 Maintainer: yannick Status: ready -->
<!-- Reviewed: yes Maintainer: pmartin -->
<!-- EN-Revision: f5b71e9150fddd14fa56c3c8f7197ef08e966c0b Maintainer: yannick Status: ready -->

<chapter xml:id="security.current" xmlns="http://docbook.org/ns/docbook">
<title>Être à jour</title>
Expand Down
36 changes: 18 additions & 18 deletions security/database.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 0009ebd09f938e8f066779bb9bb774baed10bd8a Maintainer: lacatoire Status: ready -->
<!-- EN-Revision: f5b71e9150fddd14fa56c3c8f7197ef08e966c0b Maintainer: lacatoire Status: ready -->

<chapter xml:id="security.database" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Sécurité des bases de données</title>
Expand All @@ -13,7 +13,7 @@
Pour lire ou stocker des informations, il faut se connecter au serveur
de bases de données, envoyer une requête valide, lire le résultat et
refermer la connexion. De nos jours, le langage le plus courant pour ce
type de communication est le langage SQL
type de communication est le langage SQL
(<literal>Structured Query Language</literal>). Voir
comment un pirate peut
<link linkend="security.database.sql-injection">s'introduire dans une
Expand All @@ -31,15 +31,15 @@
probabilité de réussite d'un pirate. En ajoutant à cela un bon schéma de base
de données, on obtient une application réussie.
</simpara>

<sect1 xml:id="security.database.design">
<title>Schéma de base de données</title>
<simpara>
La première étape est de créer une base de données, à moins d'utiliser
une base de données déjà créée. Lorsque la base
de données est créée, elle est assignée à un propriétaire, qui a
exécuté l'instruction de création.
Généralement, seul le propriétaire et le super utilisateur peuvent
Généralement, seul le propriétaire et le superutilisateur peuvent
intervenir avec les tables de cette base, et il faut que ce dernier
donne des droits à tous les intervenants qui auront à travailler sur cette
base.
Expand All @@ -61,7 +61,7 @@
de droits, ils ne puissent pas affecter toute l'application.
</simpara>
</sect1>

<sect1 xml:id="security.database.connection">
<title>Connexions au serveur de base de données</title>
<simpara>
Expand All @@ -74,7 +74,7 @@
de comprendre les informations échangées.
</simpara>
</sect1>

<sect1 xml:id="security.database.storage">
<title>Modèle de stockage avec chiffrement</title>
<simpara>
Expand All @@ -101,7 +101,7 @@
seront stockées, et les déchiffrer lorsqu'elles seront relues. Voir la
suite pour des exemples d'utilisation de ce chiffrement.
</simpara>

<sect2 xml:id="security.database.storage.hashing">
<title>Hachage</title>
<simpara>
Expand Down Expand Up @@ -150,7 +150,7 @@ if ($row && password_verify($password, $row['pwd'])) {
</example>
</sect2>
</sect1>

<sect1 xml:id="security.database.sql-injection">
<title>Injection SQL</title>
<simpara>
Expand All @@ -165,17 +165,17 @@ if ($row && password_verify($password, $row['pwd'])) {
<para>
<example>
<title>
Séparation des résultats en pages, et créer des superutilisateurs
Séparation des résultats en pages, et création de superutilisateurs
(PostgreSQL)
</title>
<simpara>
Dans l'exemple suivant, l'entrée de l'utilisateur est directement interpolée dans la
requête SQL, permettant à l'attaquant d'obtenir un compte superutilisateur dans la base de données.
</simpara>
</simpara>
<programlisting role="php">
<![CDATA[
<?php
$offset = $_GET['offset']; // Attention, aucune validation!
$offset = $_GET['offset']; // Attention, aucune validation !
$query = "SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET $offset;";
$result = pg_query($conn, $query);
?>
Expand All @@ -199,7 +199,7 @@ insert into pg_shadow(usename,usesysid,usesuper,usecatupd,passwd)
]]>
</programlisting>
</informalexample>
Si cela arrive, le script donnerait un accès super utilisateur à l'attaquant.
Si cela arrive, le script donnerait un accès superutilisateur à l'attaquant.
Il est à noter que la valeur <literal>0;</literal> fournit un décalage valide à la requête
originale et la termine correctement.
</para>
Expand Down Expand Up @@ -368,7 +368,7 @@ $result = mssql_query($query);
</caption>
</mediaobject>
</para>

<sect2 xml:id="security.database.avoiding">
<title>Techniques de contournement</title>
<para>
Expand Down Expand Up @@ -432,7 +432,7 @@ La liaison de paramètres ne peut être utilisée que pour les données. Les aut
dans <link linkend="ref.ctype">Fonctions de type de caractères</link>
(par exemple <function>is_numeric</function>, <function>ctype_digit</function>
respectivement) et jusqu'à la
prise en charge des <link linkend="ref.pcre">Expressions régulières compatibles avec Perl</link>.
support des <link linkend="ref.pcre">Expressions régulières compatibles avec Perl</link>.
</simpara>
</listitem>
<listitem>
Expand All @@ -445,11 +445,11 @@ La liaison de paramètres ne peut être utilisée que pour les données. Les aut
</listitem>
<listitem>
<simpara>
Si la couche de base de données ne prend pas en charge la liaison de variables, alors
Si la couche de base de données ne supporte pas la liaison de variables, alors
il faut mettre chaque valeur fournie par l'utilisateur non numérique entre guillemets avec la fonction d'échappement de chaîne spécifique à la base de données (par exemple
<function>mysql_real_escape_string</function>,
<function>sqlite_escape_string</function>, etc.).
Les fonctions génériques comme <function>addslashes</function> ne sont utiles que dans un environnement très spécifique (par exemple MySQL dans un ensemble de caractères à octets uniques avec <varname>NO_BACKSLASH_ESCAPES</varname> désactivé), il est donc
Les fonctions génériques comme <function>addslashes</function> ne sont utiles que dans un environnement très spécifique (par exemple MySQL dans un jeu de caractères à octets uniques avec <varname>NO_BACKSLASH_ESCAPES</varname> désactivé), il est donc
préférable de les éviter.
</simpara>
</listitem>
Expand All @@ -468,8 +468,8 @@ La liaison de paramètres ne peut être utilisée que pour les données. Les aut
À côté de ces conseils, il est recommandé d'enregistrer les requêtes, soit
dans les scripts, soit dans la base elle-même, si elle le supporte.
Évidemment, cet enregistrement ne sera pas capable d'empêcher une attaque,
mais permettra de retrouver la requête qui a fauté. L'historique
n'est pas très utile par lui-même mais au niveau des informations qu'il
mais permettra de retrouver l'application qui a été contournée. L'historique
n'est pas utile en soi, mais par les informations qu'il
contient. Plus il y a de détails, mieux c'est.
</simpara>
</sect2>
Expand Down
16 changes: 7 additions & 9 deletions security/errors.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: ae725a44023db78b9f6e9d2a0baac8c8dc337d38 Maintainer: lacatoire Status: ready -->
<!-- Reviewed: yes Maintainer: pmartin -->
<!-- EN-Revision: f5b71e9150fddd14fa56c3c8f7197ef08e966c0b Maintainer: lacatoire Status: ready -->

<chapter xml:id="security.errors" xmlns="http://docbook.org/ns/docbook">
<title>Rapport d'erreurs</title>
Expand Down Expand Up @@ -70,24 +68,24 @@
faiblesses connues du système), en lui envoyant des données invalides, il peut déterminer
qu'elle a été construite via un script PHP.
</para>
<para>
<simpara>
Une erreur de fonction peut indiquer si un système supporte une base de
données spécifique, ou bien donner des indices quant à la façon dont une page a
données spécifique, ou bien comment une page a
été conçue ou développée. Cela peut orienter l'intrus
vers les ports de cette base de données ou bien vers une attaque
liée à cette application. En envoyant des données
erronées, par exemple, un pirate peut déterminer l'ordre
d'identification dans un script (à partir des numéros de lignes d'erreurs),
ou sonder à la recherche de failles qui pourraient être exploitées à
ou sonder à la recherche de failles qui pourraient être présentes à
différents endroits du script.
</para>
<para>
</simpara>
<simpara>
Une erreur de fichier, ou une erreur générale de PHP, peut indiquer
quelles sont les permissions du serveur web, ainsi que la structure
et l'organisation des fichiers. Le code de gestion d'erreurs écrit par le
développeur peut aussi aggraver ce problème, en permettant l'exploitation facile
d'informations préalablement "cachées".
</para>
</simpara>
<para>
Il y a trois solutions majeures à ces problèmes : la première
est de scruter toutes les fonctions, et d'essayer de traiter toutes les
Expand Down
10 changes: 4 additions & 6 deletions security/filesystem.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 91570644fbbe4d23e79908e1a04c4c4d003fe587 Maintainer: lacatoire Status: ready -->
<!-- Reviewed: yes -->
<!-- EN-Revision: f5b71e9150fddd14fa56c3c8f7197ef08e966c0b Maintainer: lacatoire Status: ready -->

<chapter xml:id="security.filesystem" xmlns="http://docbook.org/ns/docbook">
<title>Sécurité des fichiers</title>
Expand Down Expand Up @@ -148,7 +146,7 @@ if (!ctype_alnum($username) || !preg_match('/^(?:[a-z0-9_-]|\.(?!\.))+$/iD', $us
</programlisting>
</example>
</para>
<para>
<simpara>
Suivant le système d'exploitation, il faudra protéger
un grand nombre de fichiers, notamment les entrées de périphériques,
(<filename>/dev/</filename> ou <filename>COM1</filename>), les fichiers de
Expand All @@ -157,7 +155,7 @@ if (!ctype_alnum($username) || !preg_match('/^(?:[a-z0-9_-]|\.(?!\.))+$/iD', $us
(<filename>/home/</filename>, <filename>My Documents</filename>), etc.
Pour cette raison, il est généralement plus sûr d'établir une
politique qui interdit TOUT sauf ce qui est autorisé.
</para>
</simpara>
<sect1 xml:id="security.filesystem.nullbytes">
<title>Problèmes liés aux octets nuls</title>
<simpara>
Expand Down Expand Up @@ -187,7 +185,7 @@ if (file_exists('/home/wwwrun/' . $file . '.php')) {
</example>
<para>
Ainsi, toute chaîne utilisée dans des opérations sur le système de fichiers
doit toujours être validée proprement. Voici une meilleure solution de
doit toujours être validée proprement. Voici une version améliorée de
l'exemple précédent :
</para>
<example>
Expand Down
4 changes: 1 addition & 3 deletions security/general.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 96c9d88bad9a7d7d44bfb7f26c226df7ee9ddf26 Maintainer: yannick Status: ready -->
<!-- Reviewed: yes Maintainer: pmartin -->
<!-- EN-Revision: f5b71e9150fddd14fa56c3c8f7197ef08e966c0b Maintainer: yannick Status: ready -->

<chapter xml:id="security.general" xmlns="http://docbook.org/ns/docbook">
<title>Considérations générales</title>
Expand Down
12 changes: 5 additions & 7 deletions security/hiding.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: ab6785b01ce1006e3a9761988575289f40c9b678 Maintainer: yannick Status: ready -->
<!-- Reviewed: yes Maintainer: pmartin -->
<!-- EN-Revision: f5b71e9150fddd14fa56c3c8f7197ef08e966c0b Maintainer: yannick Status: ready -->

<chapter xml:id="security.hiding" xmlns="http://docbook.org/ns/docbook">
<title>Masquer PHP</title>
Expand All @@ -10,12 +8,12 @@
plus faibles. Mais dans certains cas, chaque action, aussi faible soit-elle,
concernant la sécurité, est souhaitable.
</para>
<para>
<simpara>
Quelques astuces permettent de masquer <acronym>PHP</acronym>, ce qui peut ralentir
un attaquant qui recherche des faiblesses dans le système. En
réglant l'option expose_php à <literal>off</literal> dans le fichier &php.ini;,
il est possible de réduire la quantité d'informations disponible.
</para>
</simpara>
<para>
Une autre astuce est de configurer le serveur web, comme Apache,
pour qu'il utilise plusieurs types de fichiers différents avec <acronym>PHP</acronym>,
Expand Down Expand Up @@ -48,14 +46,14 @@ AddType application/x-httpd-php .bop .foo .133t
<title>Utiliser le type <acronym>HTML</acronym> pour les extensions PHP</title>
<programlisting role="apache-conf">
<![CDATA[
# Faire que le code PHP ressemble à du html
# Faire que le code PHP ressemble à du HTML
AddType application/x-httpd-php .htm .html
]]>
</programlisting>
</example>
Pour que cela fonctionne efficacement, il convient de renommer tous les
fichiers <acronym>PHP</acronym> avec les extensions ci-dessus. Même si c'est une forme
de sécurité du non-dit, c'est une mesure de prévention mineure,
de sécurité par l'obscurité, c'est une mesure de prévention mineure,
avec peu d'inconvénients.
</para>
</chapter>
Expand Down
4 changes: 1 addition & 3 deletions security/intro.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 96c9d88bad9a7d7d44bfb7f26c226df7ee9ddf26 Maintainer: lacatoire Status: ready -->
<!-- Reviewed: yes Maintainer: pmartin -->
<!-- EN-Revision: f5b71e9150fddd14fa56c3c8f7197ef08e966c0b Maintainer: lacatoire Status: ready -->

<chapter xml:id="security.intro" xmlns="http://docbook.org/ns/docbook">
<title>Introduction</title>
Expand Down
20 changes: 9 additions & 11 deletions security/variables.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: f0ed705e1ac34fed4c92979f63bee74c382f991b Maintainer: yannick Status: ready -->
<!-- Reviewed: yes Maintainer: pmartin -->
<!-- EN-Revision: f5b71e9150fddd14fa56c3c8f7197ef08e966c0b Maintainer: yannick Status: ready -->

<chapter xml:id="security.variables" xmlns="http://docbook.org/ns/docbook">
<title>Données transmises par les internautes</title>
Expand All @@ -20,7 +18,7 @@
// efface un fichier à la racine d'un utilisateur... ou peut-être
// de quelqu'un d'autre ?
unlink($evil_var);
// Enregistre l'accès dans un log... ou peut-être une entrée dans /etc/passwd ?
// Enregistre l'accès dans un journal d'événements... ou peut-être une entrée dans /etc/passwd ?
fwrite($fp, $evil_var);
// Exécute une commande triviale... ou rm -rf * ?
system($evil_var);
Expand Down Expand Up @@ -64,14 +62,14 @@ exec($evil_var);
</listitem>
</itemizedlist>
</para>
<para>
En répondant de manière adéquate à ces questions
lors de l'écriture des scripts (plutôt qu'après), cela
évitera une réécriture inopportune lorsqu'il faudra améliorer leur
<simpara>
Répondre de manière adéquate à ces questions
lors de l'écriture des scripts (plutôt qu'après)
évite une réécriture inopportune lorsqu'il faudra améliorer leur
sécurité. En commençant les projets avec ces recommandations
en tête, la sécurité du système ne sera pas garantie,
mais elle s'en trouvera améliorée.
</para>
</simpara>
<para>
Il est recommandé d'améliorer la sécurité en désactivant les paramètres de commodité qui masquent
l'origine, la validité ou l'intégrité des données en entrée. La création
Expand All @@ -87,14 +85,14 @@ exec($evil_var);
Bien qu'elles ne soient plus présentes dans PHP, des risques similaires
persistent si la gestion des entrées est mal maîtrisée.
</para>
<para>
<simpara>
Activer <link linkend="function.error-reporting">error_reporting(E_ALL)</link>
pour aider à détecter les variables non initialisées et à valider les entrées.
Utiliser les types stricts
(<link linkend="language.types.declarations.strict">declare(strict_types=1)</link>,
introduit à partir de PHP 7) pour imposer la sécurité des types, éviter
les conversions involontaires et améliorer la sécurité globale.
</para>
</simpara>
</chapter>

<!-- Keep this comment at the end of the file
Expand Down
Loading