V5.4.2 Memory, String, and Unmanaged Code
Requirement:#
Verify that format strings do not take potentially hostile input, and are constant.
Explanation:#
Строки формата используются для указания того, как данные отображаются или форматируются в приложении. Если строки формата получают входные данные из ненадежных источников, таких как пользовательский ввод, существует риск уязвимости строк формата, что может привести к проблемам безопасности, таким как раскрытие информации, выполнение кода и атаки типа «отказ в обслуживании».
Remediation:#
Чтобы предотвратить уязвимости строк формата, важно убедиться, что строки формата являются постоянными и не получают потенциально враждебных входных данных из ненадежных источников. Этого можно достичь несколькими способами: Используйте постоянные строки формата:
- Избегайте использования строк формата, которые создаются или изменяются во время выполнения с использованием пользовательского ввода или других ненадежных данных.
- Проверка ввода пользователя. Убедитесь, что ввод пользователя проверен и очищен, чтобы предотвратить включение вредоносных данных в строки формата.
- Используйте функции со строками фиксированного формата. Используйте такие функции, как printf, со строкой фиксированного формата, которую нельзя изменить во время выполнения.
Пример реализации на C:
В этом примере scanf используется для получения пользовательского ввода, который затем безопасно отображается с помощью printf с постоянной строкой формата. Строка формата "%d" указывает, что должно отображаться целочисленное значение, что гарантирует, что пользовательский ввод проверен и правильно отформатирован.