проблема уязвимости системы обеспечения безопасности Строки формата snprintf

Регрессионное тестирование - это проверка того, не влияет ли исправление ошибки или какое-либо улучшение в нашем коде на весь код. Вероятно, это делается на последнем этапе.

Принимая во внимание, что повторное тестирование или вы говорите, что повторное тестирование выполняется, когда конкретный тест не пройден, и ошибка решается, чтобы просто проверить, прошел ли конкретный тест или нет, и ошибка исправлена ​​или нет. Это делается после каждого исправления ошибки.

5
задан Ovi Tisler 10 March 2009 в 18:31
поделиться

2 ответа

Ваш код прекрасен.

Проблема - то, что при передаче строки, которая является пользователем, которым управляют как printf строка формата, ошибки безопасности могут возникнуть.

Например, printf(userName);

Где имя пользователя предоставляется пользователем, пользователь может передать "%s" и заставить Вашу функцию начинать получать доступ к данным в случайном адресе на стеке, который мог привести к катастрофическому отказу. printf попытается вытолкать дополнительные параметры от стека, приводящего к повреждению стека. Атака "отказ в обслуживании" как это является, вероятно, лучшим случаем, информация может быть раскрыта, заставив printf разгрузить значения на стеке и существуют даже способы заставить функции стиля printf изменять обратный адрес на стеке.

Так как Ваши строки не являются пользователем, которым управляют, безопасно проигнорировать это сообщение. Типичная фиксация должна заменить printf пример, с которым я дал printf("%s", userName);, который, казалось бы, не помог бы в Вашем случае, потому что строки константы, кажется, содержат строки формата.

Википедия имеет больше на уязвимостях строки формата здесь: http://en.wikipedia.org/wiki/Format_string_vulnerabilities

11
ответ дан 18 December 2019 в 14:52
поделиться

Идея является тем значением testStrings[testID] может быть изменен так или иначе для включения дополнительных спецификаторов формата.

Поскольку snprintf() не имеет никакой возможности проверить, соответствует ли количество параметров количеству спецификаторов формата, которые оно просто возьмет следующий адрес от стека для использования в качестве значения для следующего спецификатора формата, и странные вещи могут произойти затем.

Это известно как нападение строки формата.

2
ответ дан 18 December 2019 в 14:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: