次の方法で共有


セキュリティに関する考慮事項: Microsoft Windows コントロール

このトピックでは、Windows コントロールに関連するセキュリティに関する考慮事項について説明します。 このトピックの情報では、セキュリティの問題について知る必要があるすべてを提供するわけではありません。このテクノロジ領域の開始点とリファレンスとして使用してください。

コンピューター間の相互接続性は一般的です。開発者の主な関心事は、アプリケーションのセキュリティである必要があります。 次のセクションでは、Windows コントロールをプログラミングするときに考慮すべき潜在的なセキュリティの問題について説明します。

Null で終了するコントロール メッセージ

コントロール メッセージとマクロの多くは、文字列パラメーターを持っています。 多くの場合、これらのメッセージは入力文字列を検証しません。特に、終了 '\0'をチェックしません。 文字列をパラメーターとして使用するメッセージを呼び出す場合は、文字列が null で終了することを明示的に指定します。

文字列の使用

Windows コントロールをプログラムする場合は、文字列を操作する必要があります。 ほぼすべてのコントロールにテキストを挿入する必要があります。 たとえば、リスト ボックスを設定するには、コントロールに文字列を読み込む必要があります。 文字列を誤って使用するとバッファー オーバーランが発生することが多いため、このセキュリティ リスクを回避するための予防措置を講じます。

バッファー オーバーランの詳細については、Michael Howard と David LeBlanc、Microsoft Press、2002 セキュリティ APIのベスト プラクティスによるセキュリティで保護されたコード の記述に関する を参照してください。

入力の検証

次の制御メッセージでは、セキュリティの問題が発生する可能性があります。

テキストの長さを取得する呼び出しと、テキストが表示または使用される時間の間でテキストが変更されると、バッファー オーバーランが発生する可能性があります。 これを回避するには、文字列を使用する前に検証する必要があります。 さらに、テキスト、CB_GETLBTEXTTB_GETBUTTONTEXT、および TTM_GETTEXTを取得するメッセージには、バッファー オーバーランの可能性を示すバッファー サイズ パラメーターがありません。

CB_GETLBTEXT または SB_GETTEXTを使用する場合は、最初に CB_GETLBTEXTLEN または SB_GETTEXTLENGTH を呼び出してバッファー サイズを取得する必要があります。 これらのメッセージの一部 (TB_GETBUTTONTEXTLVM_GETISEARCHSTRING、および TVM_GETISEARCHSTRING) は、NULL パラメーター値を使用して呼び出して、文字列を取得するメッセージを呼び出す前に文字列の長さを取得できます。

特に注意が必要なメッセージは、ステータス バー SB_GETTIPTEXT メッセージです。 このメッセージは、取得する文字列の長さを照会する方法を提供しません。

パスワードの使用

パスワードで保護された編集コントロール (ES_PASSWORD スタイル) を使用する場合は、ユーザーのパスワードがメモリに公開されないように、取得したテキストを含むバッファーをできるだけ早く 0 に設定する必要があります。

セキュリティ アラート

次の表に、誤って使用するとアプリケーションのセキュリティを侵害する可能性がある機能を示します。 ここに記載されているメッセージには、バッファー サイズを指定するパラメーターは用意されていません。

特徴 緩和
DlgDirListComboBox 関数によって使用されるバッファーが書き込み可能で、null で終了していることを確認します。
CB_GETLBTEXT CB_GETLBTEXTLEN を呼び出してバッファー サイズを取得し、CB_GETLBTEXT を呼び出して文字列を取得します。
LVM_GETISEARCHSTRING NULL パラメーター値を持つメッセージを呼び出してバッファー サイズを取得し、もう一度メッセージを呼び出して文字列を取得します。
SB_GETTEXT SB_GETTEXTLENGTH を呼び出してバッファー サイズを取得し、SB_GETTEXT を呼び出して文字列を取得します。
TB_GETBUTTONTEXT NULL パラメーター値を持つメッセージを呼び出してバッファー サイズを取得し、もう一度メッセージを呼び出して文字列を取得します。
TTM_GETTEXT このメッセージには、バッファーのサイズを知ったり指定したりする方法はありません。
TVM_GETISEARCHSTRING バッファー サイズを取得するには、NULL パラメーター値を渡してメッセージを呼び出し、もう一度メッセージを呼び出して文字列を取得します。

 

その他のリソース する

Microsoft セキュリティ する

セキュリティ

Microsoft Security Response Center

セキュリティ API のベスト プラクティス