¿Cómo prevengo los ataques de cadenas de formatting y los desbordamientos de búfer en iOS?

La documentation de la Guía de encoding segura de Apple ofrece orientación sobre:

  • ataques de cadena de formatting
  • desbordamientos de búfer

Lo que no está claro (para mí, de todos modos) es cómo prevenir los ataques de cadena de formatting y los desbordamientos de búfer al usar NSString.

¿Cómo hago para defenderme de tales ataques? ¿Hay alguna categoría que pueda aplicar para protegerme contra esto? ¿Hay un equivalente NSString "seguro" que pueda usar?

Los desbordamientos de búfer generalmente no son un problema cuando está poniendo datos en un NSString (o un NSMutableString ), porque cuando crea un NSString , debe decirle cuántos datos le está dando y asigna automáticamente suficiente almacenamiento privado para mantenerlo lo que le das Solo obsérvese las API publicadas y no intente ninguna travesura como arrojar const desde un puntero devuelto por UTF8String y escribiendo a través del puntero.

Tenga en count que NSMutableData , a diferencia de NSMutableString , proporciona el post mutableBytes , que devuelve un puntero a la memory al que se le permite escribir. Entonces, si estás usando esa API, debes tener cuidado con los desbordamientos del búfer.

Para cadenas de formatting, solo tiene que seguir los consejos en ese documento. Por ejemplo, nunca pase datos de una fuente no confiable como el argumento de formatting, o incluso como parte del argumento de formatting. En general, las cadenas de formatting deben ser literales de cadena o deben devolverse desde NSLocalizedString .

No hay una versión "segura" de NSString .