title: Programmation sécurisée
text: # Programmation sécurisée
  
  La programmation sécurisée consiste à prendre en compte la sécurité informatique à tous les moments de la conception, de la réalisation et de l'utilisation d'un programme informatique. Cela permet d'éviter au maximum les trous de sécurité et autres bugs.
  
  ## Conception
  
  Lors de la conception, il s'agit par exemple de concevoir le programme de façon modulaire et nécessitant le moins de droits utilisateurs possible. Il est préférable d'avoir plusieurs programmes de taille réduite voir de petite taille qui collaborent entre eux, qu'un gros programme monolithique.
  
  On peut par exemple opposer la conception des serveurs DNS Bind et djbdns. Bind est conçu de manière monolithique alors que djbdns est constitué de plusieurs programmes différents interagissants entre eux.
  
  ## Réalisation
  
  Ensuite, lors de la réalisation, il faut penser à bien valider les données entrées par l'utilisateur pour éviter toutes les attaques du type dépassement de tampon (buffer overflow), les injections SQL, l'exploitation de mauvaises utilisations des chaînes de formatage (format string attacks), les dépassements d'entiers (integer overflow), etc. L'idée générale et la plus importante est de ne jamais faire confiance à l'utilisateur. Ne jamais faire des hypothèses sur les entrées sans les vérifier soi-même (par exemple taille de l'entrée, signe du nombre…).
  
  Il faut réaliser le programme dans un langage approprié. En effet, certains langages sont moins sujets que d'autres aux différents bugs de format ou autres tels que les dépassements de pile. De plus, ces langages disposant de bibliothèques de fonctions de base, l'utilisateur n'a donc pas besoin de réécrire les siennes où il risquerait d'introduire des bugs.
  
  ## Exécution
  
  Enfin lors de l'exécution, il faut penser par exemple à appliquer les différentes mises à jour de sécurité lorsqu'elles sortent. Pour ce faire, il peut être pratique de la part du concepteur de l'application de proposer un système de mise à jour simplifié de l'application.
  
  Il faut aussi faire en sorte que la configuration soit la plus simple possible et que la configuration par défaut soit la plus sécurisée possible. En effet, la plupart des utilisateurs conservent les réglages par défaut.
  
  