Sécurité : Différence entre versions
(→Modifications fonctionnelles apportées sur ovidentia 6.1.0) |
|||
| Ligne 127 : | Ligne 127 : | ||
liste des modifications fonctionnelles pour les corrections de sécurité qui peuvent entraîner des dysfonctionnements : | liste des modifications fonctionnelles pour les corrections de sécurité qui peuvent entraîner des dysfonctionnements : | ||
| − | *Les donnés de la variable $_SESSION ne sont plus intégrés dans les variables globales | + | * Les donnés de la variable $_SESSION ne sont plus intégrés dans les variables globales |
| − | *Les donnés de la variable $_FILES ne sont plus intégrés dans les variables globales | + | * Les donnés de la variable $_FILES ne sont plus intégrés dans les variables globales |
| + | * L'authentification par cookie à été modifiée | ||
Version du 1 décembre 2006 à 14:29
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.
Modifications fonctionnelles apportées sur ovidentia 6.1.0
liste des modifications fonctionnelles pour les corrections de sécurité qui peuvent entraîner des dysfonctionnements :
- Les donnés de la variable $_SESSION ne sont plus intégrés dans les variables globales
- Les donnés de la variable $_FILES ne sont plus intégrés dans les variables globales
- L'authentification par cookie à été modifiée