Partager via


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 arrêtés 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 recherchent pas de '\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 est terminée 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é par 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, TB_GETBUTTONTEXTet 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_GETISEARCHSTRINGet 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 la barre d’état SB_GETTIPTEXT message. 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 de modification protégés par mot de passe (styleES_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, si elles sont utilisées incorrectement, 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.

Caractéristique Atténuation
DlgDirListComboBox Vérifiez que la mémoire tampon utilisée par la fonction peut être écrite et terminée 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 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 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 ou de spécifier la taille de la mémoire tampon.
TVM_GETISEARCHSTRING Appelez le message en passant une valeur de paramètre null 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

de sécurité Microsoft

sécurité

centre de réponse de sécurité Microsoft

meilleures pratiques pour les API de sécurité