Подтвердить что ты не робот

Проблема с кодом: строка формата не является строковым литералом

Возможный дубликат:
Предупреждение Xcode от SnowLeopard:" формат не строковый литерал и аргументы формата

Я получаю следующую проблему для этой строки кода.

"Строка формата не является строковым литералом (потенциально небезопасным)"

NSLog([NSString stringWithFormat:@"%@", entered]);

Любые предложения?

4b9b3361

Ответ 1

Компилятор хочет, чтобы мы использовали константу NSString для строки формата (первый аргумент NSLog), поскольку она предотвращает довольно известный эксплойт, который потенциально может нарушить безопасность. Так, например, вы можете изменить код, который вы разместили, следующим образом, чтобы компилятор был счастлив:

NSLog(@"%@", [NSString stringWithFormat:@"%@", entered]);

ИЗМЕНИТЬ

И, конечно, вышеизложенное можно (и должно) просто написать следующим образом:

NSLog(@"%@", entered);

Характер безопасности Exploits

Строка неконтролируемого формата [1] - это тип уязвимости программного обеспечения, обнаруженный около 1999 года, который может использоваться в целях безопасности. Раньше считалось, что безвредные эксплоиты строк формата могут использоваться для сбой программы или выполнение вредоносного кода. Проблема связана с использование неконтролируемого ввода пользователем в качестве параметра строки формата в определенных C, которые выполняют форматирование, например printf(). Злоумышленник пользователь может использовать маркеры формата %s и %x, среди прочих, для печати данных из стека или, возможно, в другие места в памяти. Можно также записывать произвольные данные в произвольные местоположения, используя маркер формата %n, который команды printf() и подобные функции записывают количество байты, отформатированные на адрес, хранящийся в стеке.

Типичный эксплойт использует комбинацию этих методов, чтобы заставить программу перезаписать адрес библиотечной функции или адрес возврата в стеке с указателем на какой-то вредоносный шелл-код. Параметры заполнения для спецификаторы формата используются для управления количеством выходных байтов и токен %x используется для посылки байтов из стека до начала самой строки формата. Начало строки формата создается таким образом, чтобы содержать адрес, который может использоваться в качестве маркера формата %n. перезапишите адрес исполняемого вредоносного кода.

Источник: Wikipedia Строка неконтролируемого формата

[1]: http://cwe.mitre.org/data/definitions/134.html "CWE-134: строка неконтролируемого формата". Общее перечисление Слабости. MITER.

Ответ 3

Попытка:

NSLog(@"%@",[NSString stringWithFormat:@"%@",entered]);

Надеюсь, это поможет вам.:)