先頭へ戻る

バッファオーバーフロー | Programming Place Plus 用語集

Programming Place Plus トップページ -- 用語集

先頭へ戻る

名称


解説

用意しておいた領域(バッファ)の大きさを上回る量のデータを書き込んでしまい、領域の範囲外を不正に書き換えてしまうことです。

たとえば、要素数 100 として定義された配列において、末尾の要素よりも後ろにデータを書き込もうとすると、バッファオーバーフローになります。

バッファオーバーフローが起こると、バッファの後続のメモリの内容が、プログラマーの想定していなかった状態になってしまうため(たとえば、たまたまその場所に配置されていた変数が書き換えられる)、プログラムの動作に何かしらの悪影響を起こします。

プログラミング言語の種類によっては、あるいはコンパイラなどが、コンパイル時点で検出できるバッファオーバーフローをエラーにしたり、実行時に検出して、実際に不正な書き込みを行う前に例外を発生させるなどの方法で知らせたりする場合もあります。

一方で、C言語C++(の言語機能としての配列)のように、なにも防御策をとらず(未定義の動作)、プログラマーに対策を任せているものもあります。

バッファオーバーフローは外部からの攻撃に悪用される恐れがあり、ソフトウェアの代表的な脆弱性の1つとして知られています。たとえば、外部から与えられたデータを使うプログラムでは、そのデータを受け取るために確保しておいたバッファに対して、それを上回る大きさのデータが与えられれば、バッファオーバーフローを引き起こします。バッファの大きさを上回るデータを拒否したり、カットしたり、あるいはバッファの側をデータ量に応じて拡張するといった対策が必要です。


参考リンク

更新履歴


用語集のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
Twitter でツイート Twitter をフォロー LINE で送る
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー