considérations relatives à la sécurité : contrôles Microsoft Windows

cette rubrique fournit des informations sur les considérations relatives à la sécurité pour les contrôles Windows. Les informations contenues dans cette rubrique ne fournissent pas tout ce que vous devez savoir sur 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 principale préoccupation d’un développeur doit être la sécurité des applications. les sections suivantes présentent 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 des macros ont des paramètres de chaîne. Souvent, ces messages ne valident pas les chaînes d’entrée, en particulier, elles ne vérifient pas la fin d’une opération '\0' . Lorsque vous appelez un message qui utilise une chaîne comme paramètre, spécifiez explicitement que la chaîne se termine par un caractère null.

Utilisation de chaîne

quand vous programmez des contrôles Windows, il est nécessaire de manipuler des chaînes. Presque tous les contrôles requièrent 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 de chaînes de manière incorrecte 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 l’heure d’affichage ou d’utilisation du texte, 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 extraient Text, CB _ GETLBTEXT, to _ GETBUTTONTEXTet atténuation _ GETTEXT, n’ont pas de paramètre de taille de mémoire tampon qui présente le risque de dépassement de mémoire tampon.

Quand 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, to _ GETBUTTONTEXT, LVM _ GETISEARCHSTRINGet TVM _ GETISEARCHSTRINGpeuvent ê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 dont vous devez prêter une attention particulière est le message de la barre d’état SB _ GETTIPTEXT . Ce message n’offre aucun moyen d’interroger la longueur de la chaîne qui doit être récupérée.

Utilisation du mot de passe

Si vous utilisez des contrôles d’édition protégés par mot de passe (style _ de mot de passe es ), la mémoire tampon qui contient le texte récupéré doit avoir la valeur 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 de manière incorrecte, peuvent compromettre la sécurité de vos applications. Les messages répertoriés ici ne fournissent pas de paramètre spécifiant la taille de la mémoire tampon.

Fonctionnalité Limitation des risques
DlgDirListComboBox Assurez-vous que la mémoire tampon utilisée par la fonction peut être écrite dans et qu’elle se termine par un caractère null.
_GETLBTEXT CB Appelez CB _ GETLBTEXTLEN pour obtenir la taille de la mémoire tampon, puis appelez CB _ GETLBTEXT pour récupérer la chaîne.
_GETISEARCHSTRING LVM 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.
TO _ 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.
ATTÉNUATION _ GETTEXT Ce message n’offre aucun moyen 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 pour obtenir la taille de la mémoire tampon, puis appelez le message une seconde fois pour récupérer la chaîne.

Autres ressources

Sécurité Microsoft

Sécurité

Ressources de sécurité TechNet

Meilleures pratiques pour les API de sécurité