Web ベースのアプリケーションを開発する時に、ユーザにプログラムの include ファイルや設定ファイルへのアクセス(読み込み)を認めてはいけません。 このデータは、システムに侵入するのに十分な情報(たとえば、パスワード)を提供する かもしれません。 このガイドラインは、ケースによって他の種類のアプリケーションにも適用できる ことを覚えておいてください。 このガイドラインを実行するのに、必要な作業がいくつかあります。
プログラムの include ファイルもしくはその設定ファイルは、Web のドキュメント ルート外に置いてください(つまり、Web サーバはそれらのファイルを絶対外部に 出しません)。
include ファイルがテキストファイルとして外部に出さないように、Web サーバを設定 してください。たとえば、Apache を使っているなら、.inc ファイル用にハンドラか アクションを追加できます。
include ファイルは保護されたディレクトリ(.htaccess を使って) に置いてください。その上で、外部に出ないファイルとして設定してください。
ファイルに対してフィルタを使ってアクセスを拒否するようにしてください。 Apache なら、下記で実現できます。
<Files ~ "\.phpincludes"> Order allow,deny Deny from all </Files> |
include ファイルが正規のスクリプトで、それをサーバが解析するなら、ユーザが 渡してくるパラメタでは絶対動作しないようにしてください。 あわせて必ず安全に設計してください。
これらの解決方法では、ファイルが置いてあるディレクトリを誰もが読める場合、 ユーザのアクセスを防御できません。 ファイルのパーミッションを変更して、Web サーバの uid もしくは gid を持って いる者だけが読めるようにしてください。 しかしユーザが Web サーバで自分のスクリプトを実行できる(ユーザがファイルに アクセスするスクリプトを書ける)のなら、この方法ではうまくありません。 そもそも、サイトをホスティングしているサーバが信頼できない人間と共有ならば、 システムを安全にするのは困難です。 解決方法の 1 つは、Web サービスを提供するプログラムを複数立ち上げ、それぞれ パーミッションを別にすることです。この方法でさらに安全にはなりますが、実際 骨が折れる作業です。 また別の解決方法として、自分の uid や gid だけが対象ファイルを読めるように 設定し、サーバがそのスクリプトを「自分」のパーミッションで実行するように します。 後者の方法はそれ自身問題があります。サーバのある部分に root の権限 が必要となるからです。そうなると、スクリプトに必要以上のパーミッション が必要となるかもしれません。