Je suis à la recherche pour savoir pourquoi strncpy est considéré comme précaire. Quelqu'un at-il de toute sorte de documentation sur ce sujet ou des exemples d'un exploit de l'utiliser?
Réponses
Trop de publicités?Ce lien explique les exploits de l'aide stncpy.
Le problème d'origine est de toute évidence que la fonction strcpy(3) n'a pas été une mémoire sécurité de l'exploitation, de sorte qu'un attaquant pourrait fournir une chaîne de plus de la mémoire tampon qui serait de remplacer le code sur la pile, et si bien organisé, pourrait exécuter du code arbitraire à partir de l'attaquant.
Mais strncpy(3) a un autre problème en ce qu'elle ne fournit pas de fin null dans tous les cas à la destination. (Imaginez une source de la chaîne de plus que le tampon de destination.) Les opérations futures peuvent s'attendre conforme C nul de terminaison de chaînes entre également tampons de taille et de dysfonctionnement en aval lorsque le résultat est copié dans une troisième mémoire tampon.
À l'aide de strncpy(3) est mieux que strcpy(3), mais des choses comme strlcpy(3) sont mieux.
À utiliser en toute sécurité strncpy, on doit, soit (1) à la main le bâton de caractère nul sur le résultat de la mémoire tampon, (2) à savoir que le tampon se termine par un nul à l'avance, et de les passer (longueur-1) à strncpy, ou (3) à savoir que la mémoire tampon ne sera jamais être copiés à l'aide de toute méthode qui ne sera pas lié à la longueur de la longueur de la mémoire tampon.
Il est important de noter que strncpy sera zéro-complétez le tout dans le buffer passé le copié chaîne, tandis que d'autres de la longueur limitée de la fonction strcpy les variantes ne sont pas. Cela peut dans certains cas être une performance de vidange, mais dans d'autres cas, un avantage de sécurité. Par exemple, si on a utilisé des strlcpy à la copie "supercalifragilisticexpalidocious" dans un tampon, puis à la copie "il", le volant conserver "^ercalifragilisticexpalidocious^" (à l'aide de "^" pour représenter un zéro octet). Si la mémoire tampon est copié sur une taille fixe de format, les données supplémentaires pourraient tag avec elle.