$_POSTが変更できてしまっていいか?

$_POSTが設定できるということは、ブラウザからHTTP経由でなくても、POSTデータを設定してスクリプトが実行できる。Apacheアクセスログからは検出できないことになる。セキュリティ的にはいいのかな?何らかの方法でファイルをサーバ内に作成されてしまったような場合など(外部からのHTTPでの攻撃よりは危険性は低いかもしれない)。includeされたほうのファイルが、同じディレクトリからのincludeでなければエラーとするというようなことはできるのかな?
マニュアルを見ると、

  • safe_mode=onだとuidのチェックはされるみたいだ。
  • open_basedirで使用するディレクトリを制限することができるようだ。

こんなページも見つけた。

上位ディレクトリを入力される攻撃(ディレクトリ・トラバーサル攻撃)を回避するための対策として、以下のような対策を勧めるようなページを見かけたことがあるのですが、以下の方法では対策になりません。

$file = str_replace( '../', '', $_GET['file'] );

例えば、以下のようにして試してみれば分かりますが、上の対処方法では、無意味であることが分かります。

$_GET['file'] = '....//....//....//etc/passwd';

echo str_replace( '../', '', $_GET['file'] );

上の結果は以下のようになります。

../../../etc/passwd

確かに、

$file = $_GET['file'];
do
    $file = str_replace( '../', '', $file);
while (strstr('../', $file));

みたいにしないといけないのかな。