Considérations relatives à la sécurité : Contrôles Microsoft Windows

Cette rubrique fournit des informations sur les considérations de sécurité relatives aux contrôles Windows. Les informations contenues dans cette rubrique ne fournissent pas toutes les informations nécessaires pour connaître les problèmes de sécurité. Utilisez-la comme point de départ et référence pour ce domaine technologique.

L’interconnexion entre les ordinateurs est courante. La préoccupation principale d’un développeur doit être la sécurité des applications. Les sections suivantes décrivent certains problèmes de sécurité potentiels à prendre en compte lors de la programmation de contrôles Windows.

Messages de contrôle se terminant par null

La plupart des messages de contrôle et macros ont des paramètres de chaîne. Souvent, ces messages ne valident pas les chaînes d’entrée, en particulier, ils ne vérifient pas la présence d’un '\0' de fin. Lorsque vous appelez un message qui utilise une chaîne en tant que paramètre, spécifiez explicitement que la chaîne se termine par null.

Utilisation de chaîne

Lorsque vous programmez des contrôles Windows, il est nécessaire de manipuler des chaînes. Presque chaque contrôle nécessite l’insertion de texte. Par exemple, pour remplir une zone de liste, vous devez charger des chaînes dans le contrôle. Étant donné que l’utilisation incorrecte de chaînes provoque souvent des dépassements de mémoire tampon, prenez des précautions pour éviter ce risque de sécurité.

Pour plus d’informations sur les dépassements de mémoire tampon, consultez Écriture de code sécurisé de Michael Howard et David LeBlanc, Microsoft Press, 2002 et Meilleures pratiques pour les API de sécurité.

Validation d'entrée

Les messages de contrôle suivants peuvent présenter des problèmes de sécurité.

Si le texte change entre l’appel pour obtenir la longueur du texte et le moment où le texte est affiché ou utilisé, un dépassement de mémoire tampon peut se produire. Pour éviter cela, vous devez valider la chaîne avant de l’utiliser. En outre, les messages qui récupèrent du texte, CB_GETLBTEXT, To_GETo UTTONTEXT et TTM_GETTEXT, n’ont aucun paramètre de taille de mémoire tampon qui présente le risque de dépassement de mémoire tampon.

Lorsque vous utilisez CB_GETLBTEXT ou SB_GETTEXT, vous devez d’abord appeler CB_GETLBTEXTLEN ou SB_GETTEXTLENGTH pour obtenir la taille de la mémoire tampon. Certains de ces messages, TB_GETBUTTONTEXT, LVM_GETISEARCHSTRING et TVM_GETISEARCHSTRING, peuvent être appelés avec une valeur de paramètre NULL pour obtenir la longueur de la chaîne avant d’appeler le message pour récupérer la chaîne.

Un message auquel vous devez porter une attention particulière est le message de la barre d’état SB_GETTIPTEXT. Ce message ne permet pas d’interroger la longueur de la chaîne à récupérer.

Utilisation du mot de passe

Si vous utilisez des contrôles d’édition protégés par mot de passe (style ES_PASSWORD), la mémoire tampon qui contient le texte récupéré doit être définie sur zéro dès que possible pour éviter d’exposer le mot de passe de l’utilisateur en mémoire.

Alertes de sécurité

Le tableau suivant répertorie les fonctionnalités qui, en cas d’utilisation incorrecte, peuvent compromettre la sécurité de vos applications. Les messages répertoriés ici ne fournissent pas de paramètre qui spécifie la taille de la mémoire tampon.

Fonctionnalité Atténuation
DlgDirListComboBox Vérifiez que la mémoire tampon utilisée par la fonction peut être écrite et se terminer par null.
CB_GETLBTEXT Appelez CB_GETLBTEXTLEN pour obtenir la taille de la mémoire tampon, puis appelez CB_GETLBTEXT pour récupérer la chaîne.
LVM_GETISEARCHSTRING Appelez le message avec une valeur de paramètre NULL pour obtenir la taille de la mémoire tampon, puis appelez le message une deuxième fois pour récupérer la chaîne.
SB_GETTEXT Appelez SB_GETTEXTLENGTH pour obtenir la taille de la mémoire tampon, puis appelez SB_GETTEXT pour récupérer la chaîne.
TB_GETBUTTONTEXT Appelez le message avec une valeur de paramètre NULL pour obtenir la taille de la mémoire tampon, puis appelez le message une deuxième fois pour récupérer la chaîne.
TTM_GETTEXT Ce message ne vous permet pas de connaître ni de spécifier la taille de la mémoire tampon.
TVM_GETISEARCHSTRING Appelez le message en transmettant une valeur de paramètre NULL pour obtenir la taille de la mémoire tampon, puis appelez le message une deuxième fois pour récupérer la chaîne.

 

Autres ressources

Sécurité Microsoft

Sécurité

Centre de réponse aux problèmes de sécurité Microsoft

Meilleures pratiques pour les API de sécurité