よりセキュアに数字と文字列を扱う

文字列や数字を正しく扱うのが難しいということは認知されているようですが、実際に正しく使えている人は意外と少ないものです。

Windowsシェル関数(IEと共にアップデートされる)の中にはStrSafeIntSafeというAPI群が存在するため、誰でも簡単にセキュアなプログラムが作成できます。


StrSafeは<strsafe.h>に定義され、主に以下の機能を提供します。

  • バッファオーバーフロー検出(引数にバッファサイズが必須)
  • 空き領域を特定の文字で埋める
  • 危険な文字列関数(strcpy等)に対するコンパイラ警告(VC++限定?)
  • コンパイルオプションによるANSI文字列とUNICODE文字列サポート

IEのバージョンによって使えない関数があるため、_WIN32_IE系マクロ定義を正しく定義すると良いでしょう。

IntSafeは<intsafe.h>に定義され、主に以下の機能を提供します。

  • 算術アンダーフロー検出
  • 算術オーバーフロー検出
  • ポインタ型から数値型への変換

特に3番目のはこの種の危険な型変換を強要されるWindowsプログラミング(Windowsメッセージ系)において重要な意味をもつと思います。

当然ですが、どちらの関数群も補助的なものであるため、関数に与える引数が正しく書かれていないと意味がありません。なお、Visual C++ 2005には別の文字列関数群も存在しますが、使用できる場所が限られるので説明を省きます。

Leave a Reply

Be the First to Comment!

Notify of
avatar
wpDiscuz