Sécurité

De OviWiki
Aller à : navigation, rechercher

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.


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

Sécuriser une installation d'ovidentia

Rendre ovidentia plus sécurisé avec le paramétrage :

  • Activer le filtre de l'éditeur WYSIWYG dans les options du site
  • register_globals off
  • magic_quotes off
  • $babNTauth ne doit pas être activé dans config.php