重要: セキュリティの理由 から、analog を CGI プログラムとして走らせないように、あるいは他の web ファイルや CGI プログラムと一緒のディレクトリやフォルダーに入れておかないように気をつけてください。フォームインタフェースが analog を走らせる時に、analog が危険なオプションを与えられていないかどうかを確認します。この確認が無いと、あなたのシステムは、外部からの攻撃に対し無力になるでしょう。
analog が完全に設定されて、それ自身で適切に動作するまで、フォームの設定をしないで下さい。そうしないと、問題個所の発見に余計な、複雑な要因を付け加えるだけになります。analog とは異なり、フォームインタフェースは、"規格外" の動作を しません 。この章をよく読み、どのようにして環境設定するかを理解してください。
フォームインタフェースは、普通のユーザが使用するのに適していますが、システム管理者あるいは他の専門家が設定する必要があります。設定するためには、web サーバが動いていないといけません。CGI プログラムが何たるか、またそれらの動作許可を適切に設定する方法もを知らなければなりませんし、HTML フォームを書く方法も知る必要があります。この章の残りは、これらの知識を前提として話を進めます。また、Perl 5.001 かそれ以降のバージョンも持っているものとします。他のシステムに必要な事柄については、下記の 技術的な詳細 を参照すること。 ( 実際には、Windows を使用しており、Perl を持っていないときには、役立つソフトのページ からフォームインタフェースの実行版をダウンロードできます。)
注意: CGI プログラムは、セキュリティの抜け道を含み得る。それを使って、破廉恥なユーザがあなたのシステムを破壊するかもしれない。 ( もしこの事実を知らなければ、あなたは CGI プログラムを全く使ってはいけません。WWW のセキュリティについての FAQ と CGI のセキュリティについての FAQ を最初によく読んで理解してください。) このフォームインタフェースはできるだけ安全に作成した積りですが、完全に保証はできません。最高に注意深く設計された CGI プログラムでさえ、偶然にセキュリティのバグを含むことがあります。もし何か起こっても、私は責任を取れません。自分の責任に於いて使用してください。 ( ライセンス を読んでください。) 更に、もしパスワードのような特別な防御をしないか、特別なホスト名に対して anlgform.pl を制限しない限り、フォームインタフェースを設定することは、インターネット上の誰にも analog を実行させることを、ログファイルを解析可能にすることを意味していることに注意すべきである。この章の終わりの部分に、このプログラムについての セキュリティ設計についてのノート がもう少し書かれています。
フォームインタフェースは、2つの部分からなっている。オプションを選択するフォーム( anlgform.html と呼ばれている)と、それらを analog に渡す CGI プログラム( anlgform.pl と呼ばれている)である。動作させる前に、anlgform.html と anlgform.pl の両方共に、あなたのシステム用に設定 しなければならない 。この設定方法についての説明は、両方のファイルの先頭部分に書かれている。
プログラムと一緒に配布されているフォームは、フォームの一例とみなしてください。英語以外の言語のフォームは、lang ディレクトリにあります。あるいは、もし希望するなら、自分自身のフォームを書くこともできます。実際には、フォームは全く必要とされません。もし、単に CGI プログラム (anlgform.pl) にリンクを張ることだけが望みなら、通常の様に URL の中でクエスチョンマークの後に渡される引数を書けば、それで動作します。
ログファイル名: <input type=text name="LOGFILE">または、以下のように書くこともできます。
<select name=LOGFILE size=1> <option value="/var/log/apache/fred"> Fred のログファイル <option value="/var/log/apache/jane"> Jane のログファイル </select>
セキュリティあるいはパフォーマンスの理由から、フォームで指定できない幾つかのコマンドがあります。それら全ての一覧は、*LOGFORMAT、 LANGFILE、HEADERFILE、FOOTERFILE、 UNCOMPRESS、OUTFILE、CACHEOUTFILE、 ERRFILE、DNS それに SETTINGS です。そしてフォームを設定する人は、もっと付け加えることができます。これらを除外する理由について、またあなたが一覧に付け加えたいコマンドについては、以下の セキュリティについてのノート をご覧下さい。
元ファイル名: <input type=text name="FILEALIAS1"> 別名: <input type=text name="FILEALIAS2">このようにして、一対の引数を指定することだけができる。そのため、例えば、同じ ALIAS に対していくつかの別名を指定する方法は無い。
次に、FLOOR コマンドがある。もしこれらのコマンドを2つ、FLOORA と FLOORB、に分けて指定すれば、これらのコマンドの文法をフォームの使用者が知らなくても済む。これらの2つのコマンドは一体となって働く。例えば、プログラムと一緒に配布されているフォームは、以下の様に指定している。
<br>最低 <input type=TEXT name="DOMFLOORA" maxlength=6 size=6> <select name="DOMFLOORB"> <option value=r>リクエスト <option value=p>ページへのリクエスト <option value=b selected>バイト </select> 以上を持つ全てのドメインを含むもし、DOMFLOORA が 5% かつ DOMFLOORB が r であれば、DOMFLOOR 5%r がプログラムに送られる。 (または、もし、以下の様にフォームを送りたいならば、DOMFLOORA=5 かつ DOMFLOORB=%r も同様の結果となる。)
2つ目は、特定の時に他の環境設定ファイルを読み込むことを指定できることである。analog が CGI プログラムによって呼ばれた時、初期環境設定ファイル を通常どおり読み込む。次に、cg という名前を持ったオプションにより指定された他の環境設定ファイルを処理する。次は、CGI プログラムが指定する他の全てのコマンドを処理する。その後、cm という名前をもったオプションにより指定された他の環境設定ファイルを処理する。最後に、通常の様に 強制的環境設定ファイル を処理します。 (従って、2個の analog を必要とするかもしれない。一つは、フォーム用でもう一つは、フォームを使わない時の analog であり、それぞれ異なる環境設定ファイルをコンパイルしてある。) 初期と強制的環境設定ファイル中のコマンドは、環境設定に寄与することに注意せよ。それらのうちいくつかは、フォームで指定されたオプションに取って代わる。例えば、初期環境設定ファイルが INCLUDE を含んでいると、これはフォームで指定される INCLUDE と EXCLUDE コマンドに影響を与え、予期しない振る舞いをするかもしれない。
フォームが常に設定する数個のコマンドがある。これらは、あなたがどこかで設定したものに取って代わるでしょう。まず、(もし DNSFILE がフォームで設定されているなら) DNS READ かまたは(そうでない時) DNS NONE が設定される。この振る舞いを制限するには、強制的環境設定ファイルを使えばよいが、もしそうすると時間切れという問題がおそらく持ち上がるでしょう。2番目に、常に WARNINGS FL が設定される。これは、重要でない注意がサーバのエラーログに溜まらないようにするためである。これを抑えるためには、あからさまに WARNINGS コマンドをフォームの始めに書けばよい。
最初に、anlgform.pl をコマンドラインから走らせることができる。これは大部分の問題のバグを見つけるのに充分である。対のオプションを以下の様に指定できる。
anlgform.pl qv=1 LOGFILE=/some/log REQINCLUDE=pagesもし、上記の様に引数に qv=1 を含めると、anlgform.pl が何を analog に送ろうとしているのかを見ることができる。もし、qv=1 を含めないと、anlgform.pl は analog を走らせようとするだろう。
もしそれでも動かない時には、以下の点を確認してください。
最初に、フォームインターフェースを誰が動かすことができるかを考えるべきである。パスワードで防御するか anlgform.pl を特別のホスト名に制限するという手段を取らない限り、あなたのサイトにフォームインターフェースを付加するということは、インターネット上の誰でもに analog を実行可能にし、ログファイルを解析可能にするという事を意味する。これは、システムに対するプライバシーと負荷に明らかに関係している。
ある種のコマンドは、anlgform.pl により無視され analog には渡されない。それらの一覧は、anlgform.pl の一番上に書かれている。それたいする理由は以下の通りである。HEADERFILE と FOOTERFILE は、システム上のどのファイルも出力してしまう。*LOGFORMAT コマンドもまた、どのファイルも読まれてしまう。何故なら、誰かが各行に一つのファイル名を指定し、ファイル名の一覧を得ることができるからである。OUTFILE、CACHEOUTFILE と ERRFILE は、ファイルシステムに他人が書き込むことを許してしまう;ERRFILE ははまた、エラーをエラーログに溜めずに、どこかへ飛ばしてしまうことも可能である。UNCOMPRESS は、ユーザにどんなコマンドも実行可能にさせてしまう。DNS の使用は、これを READ よりも高い設定にすると、通常プロセスを時間切れにしてしまうので、禁止している。
上記のどれも削除してはならない (本当に、本当にあなた以外の誰も anlgform.pl を走らせることが完全に不可能であると確信していない限り)。初期設定で禁止されているもう2つのコマンドがあるが、これらは禁止の一覧から除外することもできる。SETTINGS が禁止の一覧に含まれている理由は、システム上の幾つかのファイルの位置を移動するためである。しかし、診断するためには有用であり、もしフォームを設定する上で問題が起きた時、一時的に除外することを考えても良い。もう一つのコマンドは、私はより危険が少ないと考えるが、LANGFILE が含まれている。このコマンドが含まれている理由は、別ファイルが言語ファイルと全く同じ行数であり、言語ファイルとして受け付けられて、出力にそのファイルの一部分が紛れ込むことが理論的にありうるからである。しかし、まずファイルは全く同じ長さでなければならない。もしこのような危険に対し充分対処できると考えるなら、LANGFILE を一覧から除外できる。
一覧に付け加えたい他のコマンドがある。例えば、(やや起こりそうも無いことではあるが)以下のことは理論的に可能である。システム上の別ファイルが、analog が解析できるログ形式に充分一致しており、その内容を漏らしてしまうことがありうる。これについて心配し、フォームからはただ一つの特別なログファイルのみを解析しようとするなら、LOGFILE コマンドを禁止リストに付け加えることができる。同様の理由から、DOMAINSFILE も付け加えられる。また、もし全ての CONFIGFILE、CM と CG を付け加えない限り、ユーザがシステム上のどの環境設定ファイルも使えるということに注意すべきである。
LOGFILE と CACHEFILE コマンドの引数は、ある許可された文字 (特に、文字、10進数、/\.:_ スペース、それに2つの{文字、10進数、下線}の間の - ) のみ含んでいるかどうかチェックされる。これは、圧縮コマンドが popen() 関数を使って使用されたとき、文字列が UNCOMPRESS コマンドと一致して、シェルに渡されてしまうかもしれないからである。
これを除いて、コマンド名は文字と10進数、1と2、だけを含んでいるかどうか確認される。そして、コマンドの引数は、制御文字 (実際には文字コード 0-32 と 127-159;特に、新行文字は禁止されている ) を含まないように確認されている。コマンドの長さは、anlgform.pl ではチェックされていないが、環境設定コマンドの長さが、analog によりチェックされているので、バッファーのオーバーフローは問題にはなりません。
ところで、analog 自身を CGI プログラムとして使うべきではないと忠告する理由は、ある種のサーバー、特にマイクロソフトの IIS は、コマンドラインの引数を CGI プログラムに渡すことをユーザに許してしまうからである。それに、たとえプログラムが適切な CGI ヘッダーを返さないときでも、出力はユーザに戻され得る。これは、上記の全ての引数の確認は、妨害されることを意味する。もちろん、CGI プログラムにコマンドラインの引数を渡せないサーバー上では、同じようなセキュリティ上の問題は無い。しかし、もしどんな引数も渡せないなら、初期設定の出力しか得られないので、analog は、CGI プログラムとしてあまり有用ではない。
Windows では、Perl スクリプトが Perl によって実行されるためには、Perl の実行ファイルは、.pl という拡張子を付ける必要がある。
anlgform.pl は、フォームへの引数渡しに GET あるいは POST メソッドを受け付ける。HTML の仕様 によると、この場合の様に、プログラムを走らせるのに何も副作用がない時に、GET を使うべきであると述べている。しかし、別の HTTP の仕様 の 15.1.3 章によると、オプションの幾つかが秘密に扱われるべき時は、POST を使うべきであると述べている。また、多くのオプションが付いた非常に長い URL は、幾つかの古いサーバーで問題を引き起こす。従って、anlgform.html は、初期設定で POST メソッドを使う。しかし、GET メソッドを使っても動く。例えば、通常の GET の様に、?記号の後ろにオプションを指定して、anlgform.pl に普通のリンクを張ることもできる。