Double Possible:
SnowLeopard Xcode avertissement: “le format n'est pas une chaîne littérale et pas de format arguments”Je reçois le problème suivant cette ligne de code.
"Chaîne de Format n'est pas une chaîne littérale (potentiellement dangereux)"
NSLog([NSString stringWithFormat:@"%@", entered]);
Toutes les suggestions?
Réponses
Trop de publicités?Le compilateur veut que nous utilisions un NSString constante pour la chaîne de format (le premier argument NSLog
) parce qu'elle empêche un assez connu exploiter qui pourraient enfreindre la sécurité. Ainsi, par exemple, vous pouvez changer le code que vous avez posté comme suit pour garder le bonheur du compilateur:
NSLog(@"%@", [NSString stringWithFormat:@"%@", entered]);
MODIFIER
Et bien sûr, le ci-dessus pourrait (et devrait) être simplement écrit comme suit:
NSLog(@"%@", entered);
La Nature des failles de Sécurité
Incontrôlée de la chaîne de format[1] est un type de vulnérabilité de logiciel, découvert en 1999 environ, qui peut être utilisé dans des failles de sécurité. Déjà pensé à couvert, chaîne de format exploits peuvent être utilisés pour crash d'un programme ou d'exécuter du code dangereux. Le problème vient de la l'utilisation incontrôlée de l'utilisateur d'entrée que le format de la chaîne de paramètre dans certains C fonctions effectuer la mise en forme, telles que l'
printf()
. Un malveillant l'utilisateur peut utiliser l'%s
et%x
format jetons, entre autres, d'imprimer les données à partir de la pile ou peut-être d'autres emplacements dans la mémoire. On peut aussi écrire des données arbitraires à des emplacements arbitraires à l'aide de l'%n
format jeton, les commandesprintf()
et des fonctions similaires à écrire le nombre de octets formaté à une adresse stockée dans la pile.Typique de l'exploiter utilise une combinaison de ces techniques pour forcer un programme à remplacer l'adresse d'une fonction de la bibliothèque ou de l'adresse de retour sur la pile avec un pointeur vers malveillant shellcode. Le rembourrage des paramètres à les spécificateurs de format sont utilisées pour contrôler le nombre d'octets de sortie et l'
%x
jeton est utilisé pour pop octets de la pile jusqu'à ce que le début de la chaîne de format en lui-même est atteint. Le début de la chaîne de format est conçu pour contenir l'adresse de l'%n
format jeton peut alors remplacer par l'adresse de la malveillant d'exécuter du code.
Source: Wikipedia Incontrôlée De La Chaîne De Format
[1]: http://cwe.mitre.org/data/definitions/134.html "CWE-134: Incontrôlée de la" Chaîne de Format. Commune De La Faiblesse De L'Énumération. MITRE.