Jeu sécurité

Le bug du mois de janvier

Proposé par Pierre Lagarde

BadSearch.aspx
<%@ Page validateRequest="false" language="c#" Codebehind="BadSearch.aspx.cs" AutoEventWireup="false" Inherits="BadSearch" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
   <HEAD>
     ...
   </HEAD>
   <body>
     <form id="Form1" method="post" runat="server">
     ...
     <asp:TextBox id="Search" runat="server"></asp:TextBox>
      <asp:Button id="Button1" runat="server" Text="Search"></asp:Button>
      <asp:Label id="Output" runat="server"></asp:Label>
     </form>
   </body>
</HTML>

BadSearch.aspx.cs
private void Button1_Click(object sender, System.EventArgs e)
{
    DoSearch (Search.Text);
}
void DoSearch (string text)
{
    Output.Text = "Votre recherche pour \"" + text + "\" à 0 résultats.";
}


La bonne réponse

La bonne réponse est :
Ne pas directement utiliser le texte saisi pas l’utilisateur pour le Output.Text

Pour des raisons de sécurité, il ne faut jamais utiliser directement ce qui provient des formulaires de saisie, car il peut y avoir du code html qui serait interprété au moment de l’affichage.


Et le code corrigé

Proposé par Pierre Lagarde

BadSearch.aspx
<%@ Page validateRequest="false" language="c#" Codebehind="BadSearch.aspx.cs" AutoEventWireup="false" Inherits="BadSearch" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
   <HEAD>
     …
   </HEAD>
   <body>
     <form id="Form1" method="post" runat="server">
     …
        <asp:TextBox id="Search" runat="server"></asp:TextBox>
        <asp:Button id="Button1" runat="server" Text="Search"></asp:Button>
        <asp:Label id="Output" runat="server"></asp:Label>
     </form>
   </body>
</HTML>

BadSearch.aspx.cs
private void Button1_Click(object sender, System.EventArgs e)
{
  DoSearch (Search.Text);
}

void DoSearch (string text)
{
  Output.Text = " Votre recherche pour \"" + HttpUtility.HtmlEncode (text) + "\" à 0 résultats.";
}

Pour aller plus loin

Article : Créer des applications ASP .Net sécurisées

Article : La sécurité des services web

Regardez les webcasts des Rencontres Sécurité pour les développeurs, et notamment le webcast vous expliquant comment sécuriser un service web

Un article à télécharger sur les 10 vulnérabilités de sécurité applicatives web les plus critiques

Le centre de conseils sur la sécurité pour les développeurs

Writing Secure Code, l’ouvrage de référence  

Le règlement | Comment jouer ? | Liste des gagnants


**
**
**
**
**
**