ホームページ  >  記事  >  バックエンド開発  >  php open_basedir のセキュリティとパフォーマンスのトレードオフに関する簡単な説明

php open_basedir のセキュリティとパフォーマンスのトレードオフに関する簡単な説明

高洛峰
高洛峰オリジナル
2016-11-29 11:11:141161ブラウズ

ウェブサイトのセキュリティとパフォーマンスは互いに矛盾しているようです。 php ウェブサイトの場合、選択は特に困難です。最も単純な例を挙げると、PHP 構成ファイルの open_basedir は、PHP が開くことができるファイルを、ファイル自体を含む指定されたディレクトリ ツリーに制限します。本来、これは Web サイトのセキュリティにとって非常に有益ですが、作成者がインターネットから入手した情報によると、open_basedir は PHP の IO 操作のパフォーマンスに大きな影響を与えるとのことです。調査データによると、php_basedir で構成されたスクリプト io の実行速度は、構成されていない場合の 10 倍以上遅くなります。

最初、私はこの結果をあまり信じていませんでしたが、テストデータを見てこの見方を認めるように確信しました。

簡単なスクリプトを作成します:

<?php
functionmicrotime_float()
{
    list($usec,$sec) =explode(" ", microtime());
    return((float)$usec+ (float)$sec);
}
 
$time_start= microtime_float();
 
is_file(&#39;1.html&#39;); //判断当前目录是否有1.html这个文件
$time_end= microtime_float();
$time=$time_end-$time_start;
 
echo"Did is_file in $time seconds\n";
?>

open_basedir のテスト結果については
0.0006 / 5.0E-5
ギャップは非常に大きいですが、賢明な友人は、作成者の Web サイトが open_basedir で構成されており、そのようなパフォーマンスがあることに注意してください。損失を考えると、安全と引き換えにパフォーマンスを犠牲にするほうがよいと思います。どのような選択をしますか?推測する必要はありません、あなたも私と同じ選択をするかもしれません ~ 結局のところ、サーバーのセキュリティの方が重要です。

ヒント: open_basedir の設定方法
スクリプトが fopen() や gzopen() などでファイルを開こうとすると、ファイルの場所がチェックされます。 PHP は、指定されたディレクトリ ツリーの外にあるファイルを開くことを拒否します。すべてのシンボリック リンクは解決されるため、シンボリック リンクを通じてこの制限を回避することはできません。

特別な値。スクリプトの作業ディレクトリがベース ディレクトリとして使用されることを指定します。ただし、スクリプトの作業ディレクトリは chdir() によって簡単に変更できるため、これは多少危険です。

httpd.conf ファイルでは、「php_admin_value open_basedir none」メソッド (一部の仮想ホストなど) を使用して、他の構成オプションと同様に open_basedir をオフにすることができます。

Windows では、ディレクトリをセミコロンで区切ります。他のシステム上のディレクトリを区切るにはコロンを使用します。 Apache モジュールとして、親ディレクトリの open_basedir パスが自動的に継承されます。

open_basedir で指定される制限は、実際にはディレクトリ名ではなくプレフィックスです。これは、「open_basedir = /dir/incl」により、「/dir/include」および「/dir/incls」が存在する場合には、それらへのアクセスも許可されることを意味します。指定したディレクトリのみへのアクセスを制限したい場合は、パス名の末尾にスラッシュを付けます。例: 「open_basedir = /dir/incl/」。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。