Comment : se protéger contre les attaques de script dans une application Web en utilisant le codage HTML

Mise à jour : novembre 2007

La plupart des attaques de script ont lieu lorsque les utilisateurs peuvent obtenir du code exécutable (ou script) dans votre application. Par défaut, ASP.NET offre une validation de demande, qui déclenche une erreur lors de la publication d'un formulaire contenant du HTML.

Vous pouvez vous protéger des attaques de script à l'aide des méthodes ci-dessous :

  • Exécutez la validation des paramètres sur les variables de formulaire, les variables chaîne de requête et les valeurs de cookie. Cette validation doit inclure deux types de vérification : la vérification que les variables peuvent être converties vers le type attendu (par exemple, converties en entier, converties en date et heure, etc.) et la vérification des plages ou de la mise en forme attendues. Par exemple, une variable de publication de formulaire censée être un entier doit être vérifiée avec la méthode Int32.TryParse afin de vérifier que la variable est vraiment un entier. En outre, l'entier obtenu doit être vérifié pour vérifier que la valeur est comprise dans une plage de valeurs attendue.

  • Appliquez le codage HTML à la sortie de chaîne lors de la réécriture des valeurs dans la réponse. Cela permet de garantir que toute entrée de chaîne fournie par l'utilisateur sera restituée comme texte statique dans les navigateurs plutôt que comme un code de script exécutable ou un ensemble d'éléments HTML interprétés.

Le codage HTML convertit les éléments HTML à l'aide de caractères réservés HTML de sorte qu'ils s'affichent au lieu de s'exécuter.

Pour appliquer le codage HTML à une chaîne

  • Avant d'afficher des chaînes, appelez la méthode HtmlEncode. Les éléments HTML sont convertis en représentations de chaînes. Le navigateur les affiche au lieu de les interpréter comme du HTML.

    L'exemple ci-dessous illustre le codage HTML. Dans la première instance, l'entrée d'utilisateur est codée avant d'être affichée. Dans la seconde instance, les données de la base de données sont codées avant d'être affichées.

    Remarque :

    Cet exemple ne fonctionnera que si vous désactivez la validation de demande dans la page en ajoutant l'attribut @ PageValidateRequest="false". Il n'est pas recommandé de désactiver la validation de demande dans une application de production, veillez donc à activer de nouveau la validation de demande après avoir consulté cet exemple.

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e _
        As System.EventArgs) Handles Button1.Click
            Label1.Text = Server.HtmlEncode(TextBox1.Text)
            Label2.Text = _
                Server.HtmlEncode(dsCustomers.Customers(0).CompanyName)
    End Sub
    
    private void Button1_Click(object sender, System.EventArgs e)
    {
        Label1.Text = Server.HtmlEncode(TextBox1.Text);
        Label2.Text = 
            Server.HtmlEncode(dsCustomers1.Customers[0].CompanyName);
    }
    

Voir aussi

Concepts

Vue d'ensemble des attaques de script

Vue d'ensemble des menaces de sécurité des applications Web

Méthodes de sécurité de base pour les applications Web