Вопросы безопасности: элементы управления Microsoft Windows
В этом разделе содержатся сведения о соображениях безопасности, связанных с элементами управления Windows. Сведения в этом разделе не содержат всех, что вам нужно знать о проблемах безопасности, используйте его в качестве отправной точки и ссылки на эту область технологий.
Взаимосоединение между компьютерами распространено; Главной проблемой разработчика должна быть безопасность приложений. В следующих разделах рассматриваются некоторые потенциальные проблемы безопасности, которые следует учитывать при программировании элементов управления Windows.
- Сообщения управления, завершаемые значением NULL
- Использование строки
- Проверка входных данных
- Использование пароля
- оповещения безопасности
- Связанные статьи
Сообщения управления, завершаемые значением NULL
Многие сообщения управления и макросы имеют строковые параметры. Часто эти сообщения не проверяют входные строки, в частности, они не проверка для конца'\0'
. При вызове сообщения, использующего строку в качестве параметра, явно укажите, что строка завершается значением NULL.
Использование строки
При программе элементов управления Windows необходимо управлять строками. Почти каждый элемент управления требует вставки текста. Например, чтобы заполнить поле списка, необходимо загрузить строки в элемент управления. Так как использование строк неправильно вызывает переполнение буфера, примите меры предосторожности, чтобы избежать этого риска безопасности.
Дополнительные сведения о переполнении буферов см. в статье "Написание защищенного кода" Майклом Ховардом и Дэвидом LeBlanc, Microsoft Press, 2002 и рекомендациями по API безопасности.
Проверка ввода
Следующие сообщения управления могут представлять проблемы с безопасностью.
- CB_GETLBTEXT
- LVM_GETISEARCHSTRING
- SB_GETTEXT
- SB_GETTIPTEXT
- ТБ_GEТБ UTTONTEXT
- TTM_GETTEXT
- TVM_GETISEARCHSTRING
Если текст изменяется между вызовом, чтобы получить длину текста и время отображения или использования текста, может произойти переполнение буфера. Чтобы избежать этого, необходимо проверить строку перед его использованием. Кроме того, сообщения, извлекающие текст, 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 , чтобы получить размер буфера, а затем вызовите сообщение во второй раз, чтобы получить строку. |
См. также
-
Другие ресурсы