Sécurité : Différence entre versions
| Ligne 1 : | Ligne 1 : | ||
| − | |||
| − | 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. | + | === Filtrez toutes les données externes === |
| − | Pour les | + | 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 ... | ||
| + | |||
| + | <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
Sommaire
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 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.
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.