Écrire du code sécurisé

Référence sur drupal.org : 15 Mai 2009 – 15h38 - http://drupal.org/writing-secure-code


Vous avez repéré un problème de sécurité ? Informez-en l’équipe de sécurité.

Que vous écriviez un petit bout de code ou un module de A à Z, il est important que votre code soit sécurisé.

Utilisez des fonctions de contrôle sur les sorties pour éviter les attaques par cross-scripting

Aucun contenu fourni par l’utilisateur ne doit être restitué tel quel dans le HTML.

Reportez-vous à Comment manipuler du texte de façon sûre pour plus d’informations

Utilisez la couche d’abstraction de base de données pour éviter les attaques par injection SQL

Utilisez la couche base de données correctement. Par exemple, ne concaténez jamais des données dans une requête SQL comme ceci :

<?php
db_query
('SELECT foo FROM {table} t WHERE t.name = '$_GET['user']); 
?>

A  la place, utilisez les caractères de substitution avec db_query :

<?php
db_query
("SELECT foo FROM {table} t WHERE t.name = '%s' "$_GET['user']); 
?>

S’il y a un nombre variable d’arguments dans votre requête, créer un tableau de caractères de substitution. Ne faites pas ceci :

<?php
db_query
("SELECT t.s FROM {table} t WHERE t.field IN (%s)"$from_user); 
?>

Mais faites cela :

<?php
$placeholders 
implode(','array_fill(0count($from_user), "%d"));

db_query("SELECT t.s FROM {table} t WHERE t.field IN ($placeholders)"$from_user); 
?>

Utilisez db_rewrite_sql pour respecter les restrictions d’accès aux nodes

Beaucoup d’instructions SQL qui se réfèrent aux nodes ou à la table {node} doivent êtres emballées dans un appel à la fonction db_rewrite_sql() :

<?php
$result 
db_query(db_rewrite_sql("SELECT n.nid, n.title FROM {node} n"));
?>

Le mécanisme d’accès aux nodes de Drupal requiert ces appels. Sans eux, les visiteurs pourraient avoir accès à des nodes pour lesquels ils n’ont pas d’autorisation d’accès.

Commentaires

Poster un nouveau commentaire

Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Tags HTML autorisés : <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <css>, <php>, <html>, <ccss>, <ccss>, <drupal5>, <drupal6>, <html>, <javascript>, <php>. Beside the tag style "<foo>" it is also possible to use "[foo]".
  • You may use [view:viewname] tags to display listings of nodes.

Plus d'informations sur les options de formatage

CAPTCHA
Cette question permet d'éviter le spam :
1 + 5 =
Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.