2.5. 安全なプログラムの種類

安全にする必要があるプログラムは、多岐に渡ります(用語については、この文書 で定義します)。 一般的な種類を下記にいくつかあげます。

この文書は、さまざまな種類のプログラムの課題をひとまとめにして扱っています。 このやり方には欠点があります。それは、ここで扱う問題点には、プログラム全種類 へ適用できないものがある点です。 特に setuid や setgid したプログラムは、思いがけないさまざまな入力があり、 ガイドラインには setuid や setgid したプログラムだけに当てはまるものも あります。 しかし、実際はそんなに区別がはっきりしているわけではなく、あるプログラムでは この範疇を越えるものもあります(たとえば CGI スクリプトは setuid や setgid されたり、同じような影響がある方法で設定してあったりします)。また実行形式が いくつにも分かれていて、そのそれぞれが異なる「種類」のプログラムになっている 場合もあります。 さまざまな種類のプログラムをひとまとめにして検討する利点は、あるカテゴリに プログラムを無理に当てはめることなく、問題を包括的に検討できる点にあります。 こうして見ていくことで、安全が求められるプログラムすべてに対して、原則が当て はまるケースが多いことがわかります。

この文書は、C で書いたプログラムに多少偏っています。C++ や Perl、PHP、Python、 Ada95、Java のような他の言語についても、多少は扱っています。 これは Unix ライクなシステムでは C が安全なプログラムを実装する言語として 最も普及しているためです(CGI は例外で、Perl や PHP、Python をよく使います)。 また C 以外の言語の大部分は、 C のライブラリを呼び出すように作られています。 これをもって C が安全なプログラムを作るという目的に「最良の」言語である、 ということにはなりません。ここで述べられる原則の大部分は、使用している言語の いかんにかかわらず当てはまります。