Вопросы безопасности: элементы управления Microsoft Windows

В этом разделе содержатся сведения о соображениях безопасности, связанных с элементами управления Windows. Сведения в этом разделе не содержат всех, что вам нужно знать о проблемах безопасности, используйте его в качестве отправной точки и ссылки на эту область технологий.

Взаимосоединение между компьютерами распространено; Главной проблемой разработчика должна быть безопасность приложений. В следующих разделах рассматриваются некоторые потенциальные проблемы безопасности, которые следует учитывать при программировании элементов управления Windows.

Сообщения управления, завершаемые значением NULL

Многие сообщения управления и макросы имеют строковые параметры. Часто эти сообщения не проверяют входные строки, в частности, они не проверка для конца'\0'. При вызове сообщения, использующего строку в качестве параметра, явно укажите, что строка завершается значением NULL.

Использование строки

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

Дополнительные сведения о переполнении буферов см. в статье "Написание защищенного кода" Майклом Ховардом и Дэвидом LeBlanc, Microsoft Press, 2002 и рекомендациями по API безопасности.

Проверка ввода

Следующие сообщения управления могут представлять проблемы с безопасностью.

Если текст изменяется между вызовом, чтобы получить длину текста и время отображения или использования текста, может произойти переполнение буфера. Чтобы избежать этого, необходимо проверить строку перед его использованием. Кроме того, сообщения, извлекающие текст, CB_GETLBTEXT, ТБ_GEТБ UTTONTEXT и TTM_GETTEXT, не имеют параметра размера буфера, который представляет потенциал для переполнения буфера.

При использовании CB_GETLBTEXT или SB_GETTEXT необходимо сначала вызвать CB_GETLBTEXTLEN или SB_GETTEXTLENGTH, чтобы получить размер буфера. Некоторые из этих сообщений, ТБ_GEТБ UTTONTEXT, LVM_GETISEARCHSTRING и TVM_GETISEARCHSTRING, можно вызвать со значением параметра NULL, чтобы получить длину строки перед вызовом сообщения для получения строки.

Сообщение, которое следует обратить особое внимание на строку состояния, SB_GETTIPTEXT сообщение. Это сообщение не позволяет запрашивать длину строки, которую необходимо извлечь.

Использование пароля

Если вы используете элементы управления редактированием, защищенные паролем (ES_PASSWORD стиле), буфер, содержащий полученный текст, должен быть установлен на нулю как можно скорее, чтобы избежать предоставления пароля пользователя в памяти.

Оповещения системы безопасности

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

Функция Исправление
DlgDirListComboBox Убедитесь, что буфер, используемый функцией, может быть записан в и имеет значение NULL.
CB_GETLBTEXT Вызовите CB_GETLBTEXTLEN, чтобы получить размер буфера, а затем вызовите CB_GETLBTEXT, чтобы получить строку.
LVM_GETISEARCHSTRING Вызовите сообщение со значением параметра NULL , чтобы получить размер буфера, а затем вызовите сообщение во второй раз, чтобы получить строку.
SB_GETTEXT Вызовите SB_GETTEXTLENGTH, чтобы получить размер буфера, а затем вызовите SB_GETTEXT, чтобы получить строку.
ТБ_GEТБ UTTONTEXT Вызовите сообщение со значением параметра NULL , чтобы получить размер буфера, а затем вызовите сообщение во второй раз, чтобы получить строку.
TTM_GETTEXT Это сообщение не предоставляет способ узнать или указать размер буфера.
TVM_GETISEARCHSTRING Вызовите сообщение, передав значение параметра NULL , чтобы получить размер буфера, а затем вызовите сообщение во второй раз, чтобы получить строку.

 

Другие ресурсы

Microsoft Security

Безопасность

Центр Майкрософт по реагированию на угрозы

Рекомендации по API безопасности