Sécurité : Différence entre versions

De OviWiki
Aller à : navigation, rechercher
Ligne 1 : Ligne 1 :
Conseils de sécurité
 
  
Pour les titres de page il est préférable d'utiliser $babBody->setTitle() si le titre est du texte brut car la transformation en html est intégrée dans la fonction.<br>
+
=== Filtrez toutes les données externes ===
Pour les message d'erreur il est préférable d'utiliser $babBody->addError() au lieu de $babBody->msgerror.<br>
+
Toutes les données en entrée doivent être considérées comme invalides.
la fonction s'appelle addError car la prochaine version des skins permettra la gestion des messages d'erreur multiple, pour le moment les messages d'erreur sont séparés par des retour à la ligne
+
A vous de prouver leur validité.
 +
 
 +
* Vérifier que la variable contient ce que vous attendez
 +
 
 +
Utiliser ''intval'' si vous attendez un entier
 +
 
 +
Utiliser ''strval'' si vous attendez une chaîne
 +
 
 +
etc ...
 +
 
 +
<pre>
 +
$total = intval( bab_pp('total', 0));
 +
 
 +
$name = strval( bab_pp('name', 0));
 +
</pre>
 +
 
 +
 
 +
 
 +
* Initialiser vos variables:
 +
Code incorrect:
 +
 
 +
<pre>
 +
if( .... )
 +
{
 +
$var = 1;
 +
}
 +
// utilisation de $var
 +
</pre>
 +
Code correct:
 +
<pre>
 +
$var = 0;
 +
if( .... )
 +
{
 +
$var = 1;
 +
}
 +
// utilisation de $var
 +
</pre>
 +
 
 +
=== Register globals ===
 +
Développer avec la directive ''register_globals'' à ''Off''.
 +
 
 +
Et utiliser bab_rp(), bab_pp(), bab_gp() ( voir [[Règles de codage#Variables externes à PHP ( GET et POST )]].
 +
 
 +
Utiliser les superglobals pour le reste: $_SESSION, $_COOKIE, etc...
 +
 
 +
===Protection des variables de sorties ===
 +
* '''Vers le navigateur''':
 +
*: Les variables à destination du navigateur doivent être protégées, utiliser la fonction :
 +
*: '''''bab_toHtml()''''' ( voir [[Règles de codage#Protection des variables de sorties]] )
 +
*: Utiliser '''''urlencode()''''' pour les url.
 +
 
 +
* '''Vers la base de données''':
 +
**Toujours placer les données entre apostrophes quelque soit le type.
 +
*: Exemple: '''select * from table where id='2''''
 +
**Toujours utiliser db_escape_string() pour protéger les variables passées dans les requêtes SQL.
 +
*:Exemple : select id from table where id_user=\''''''.$babDB->db_escape_string($var).'''''\';
 +
**Ou la méthode quote() qui permet de traiter les tableaux
 +
*:Exemple : select id from table where id_user=IN('''''.$babDB->quote($var).''''');
 +
 
 +
 
 +
=== Affichage des messages de debug ===
 +
Utiliser la fonction bab_debug() ( Voir .[[Règles de codage#Debug]] )
 +
 
 +
 
 +
=== Configuration du serveur APACHE de développement ===
 +
Le serveur de développement doit être configuré pour reporter les erreurs.
 +
 
 +
<pre>
 +
error_reporting = E_ALL
 +
display_errors = On
 +
</pre>
 +
 
 +
On peut aussi inclure ces directives dans le fichier index.php du site:
 +
 
 +
<pre>
 +
ini_set('error_reporting', E_ALL);
 +
ini_set('display_errors', true);
 +
</pre>
 +
 
 +
 
 +
=== Les addons ===
 +
Dans chaque fichier, le premier fichier à inclure est base.php:
 +
<pre>
 +
/************************************************************************
 +
* OVIDENTIA http://www.ovidentia.org                                  *
 +
************************************************************************
 +
* Copyright (c) 2003 by CANTICO ( http://www.cantico.fr )              *
 +
...
 +
************************************************************************/
 +
include_once 'base.php';
 +
....
 +
</pre>
 +
 
 +
Ce fichier est à créer dans le même répertoire s'il le faut et doit contenir
 +
une seule instruction: '''exit;'''
 +
 
 +
Comme ceci:
 +
<pre>
 +
<?php
 +
/************************************************************************
 +
* OVIDENTIA http://www.ovidentia.org                                  *
 +
************************************************************************
 +
* Copyright (c) 2003 by CANTICO ( http://www.cantico.fr )              *
 +
*                                                                      *
 +
....
 +
************************************************************************/
 +
exit;
 +
?>
 +
</pre>
 +
 
 +
Ajouter un fichier index.html vide pour ne pas lister le répertoire.
 +
 
 +
=== Les titres de page ===
 +
Pour les titres de page il est préférable d'utiliser ''$babBody->setTitle()'' si le titre est du texte brut  
 +
car la transformation en html est intégrée dans la fonction.
 +
 
 +
Pour les messages d'erreur il est préférable d'utiliser ''$babBody->addError()'' au lieu de ''$babBody->msgerror''.
 +
 
 +
La fonction s'appelle ''addError'' car la prochaine version des skins permettra la gestion des messages d'erreurs
 +
multiples, pour le moment les messages d'erreurs sont séparés par des retours à la ligne.

Version du 24 novembre 2006 à 13:34

Filtrez toutes les données externes

Toutes les données en entrée doivent être considérées comme invalides. A vous de prouver leur validité.

  • Vérifier que la variable contient ce que vous attendez

Utiliser intval si vous attendez un entier

Utiliser strval si vous attendez une chaîne

etc ...

$total = intval( bab_pp('total', 0));

$name = strval( bab_pp('name', 0));


  • Initialiser vos variables:

Code incorrect:

if( .... )
{
$var = 1;
}
// utilisation de $var

Code correct:

$var = 0;
if( .... )
{
$var = 1;
}
// utilisation de $var

Register globals

Développer avec la directive register_globals à Off.

Et utiliser bab_rp(), bab_pp(), bab_gp() ( voir Règles de codage#Variables externes à PHP ( GET et POST ).

Utiliser les superglobals pour le reste: $_SESSION, $_COOKIE, etc...

Protection des variables de sorties

  • Vers la base de données:
    • Toujours placer les données entre apostrophes quelque soit le type.
    Exemple: select * from table where id='2'
    • Toujours utiliser db_escape_string() pour protéger les variables passées dans les requêtes SQL.
    Exemple : select id from table where id_user=\'.$babDB->db_escape_string($var).\';
    • Ou la méthode quote() qui permet de traiter les tableaux
    Exemple : select id from table where id_user=IN(.$babDB->quote($var).);


Affichage des messages de debug

Utiliser la fonction bab_debug() ( Voir .Règles de codage#Debug )


Configuration du serveur APACHE de développement

Le serveur de développement doit être configuré pour reporter les erreurs.

error_reporting = E_ALL
display_errors = On

On peut aussi inclure ces directives dans le fichier index.php du site:

ini_set('error_reporting', E_ALL);
ini_set('display_errors', true);


Les addons

Dans chaque fichier, le premier fichier à inclure est base.php:

/************************************************************************
 * OVIDENTIA http://www.ovidentia.org                                   *
 ************************************************************************
 * Copyright (c) 2003 by CANTICO ( http://www.cantico.fr )              *
...
************************************************************************/
include_once 'base.php';
....

Ce fichier est à créer dans le même répertoire s'il le faut et doit contenir une seule instruction: exit;

Comme ceci:

<?php
/************************************************************************
 * OVIDENTIA http://www.ovidentia.org                                   *
 ************************************************************************
 * Copyright (c) 2003 by CANTICO ( http://www.cantico.fr )              *
 *                                                                      *
....
************************************************************************/
exit;
?>

Ajouter un fichier index.html vide pour ne pas lister le répertoire.

Les titres de page

Pour les titres de page il est préférable d'utiliser $babBody->setTitle() si le titre est du texte brut car la transformation en html est intégrée dans la fonction.

Pour les messages d'erreur il est préférable d'utiliser $babBody->addError() au lieu de $babBody->msgerror.

La fonction s'appelle addError car la prochaine version des skins permettra la gestion des messages d'erreurs multiples, pour le moment les messages d'erreurs sont séparés par des retours à la ligne.