ウェブサイトのセキュリティとパフォーマンスは相反する関係にあるようです。 PHP Web サイトの場合、選択するのが特に困難です。最も単純な例を見てみましょう: php 構成ファイル の open_basedir は、PHP が開くことができるファイルを、ファイル自体を含む指定されたディレクトリ ツリーに制限します。本来、これは Web サイトのセキュリティにとって非常に有益ですが、作成者がインターネットから入手した情報によると、open_basedir は PHP の IO 操作のパフォーマンスに大きな影響を与えるとのことです。調査データによると、php_basedir で構成されたスクリプト io の実行速度は、構成されていない場合の 10 倍以上遅くなります。
?
最初はこの結果を完全に信じていませんでしたが、テストデータを見てこの見方を認めるようになりました。
簡単なスクリプトを作成します:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<?php
<code class="php keyword"><strong><span style="color: #006699;">function</span></strong> 関数microtime_float() {
????
list(
<span style="color: #aa7700;">$usec</span> , <span style="color: #aa7700;">$usec<code class="php variable"><span style="color: #aa7700;">$sec</span> ) = <span style="color: #aa7700;">$sec<code class="php functions"><span style="color: #ff1493;">explode</span> ( <span style="color: #ff1493;">爆発<code class="php string"><span style="color: #0000ff;">" "</span> , microtime()); <span style="color: #0000ff;">" "</p> ????
<strong><span style="color: #006699;">return</span></strong>
((float) ); <span style="color: #aa7700;">$usec</p> <span style="color: #aa7700;">$sec<code class="php plain">}
? <span style="color: #aa7700;">$time_start</span>
= microtime_float(); ?
<span style="color: #aa7700;">$time_start<code class="php spaces">?
<span style="color: #ff1493;">is_file</span>
( ?<span style="color: #0000ff;">'1.html'</span>
);?
<span style="color: #ff1493;">is_file<code class="php comments"><span style="color: #008200;">//判断当前目录是否有1.html这个文件 </span> <span style="color: #0000ff ;">'1.html'<div class="line number11 index10 alt2"> <span style="color: #aa7700;">$time_end</span> <span style="color: #008200;">//現在のディレクトリに 1.html があるかどうかを判断しますファイル<code class="php plain">= microtime_float();
<span style="color: #aa7700;">$time_end<code class="php variable"><span style="color: #aa7700;">$time</span> =
<span style="color: #aa7700;">$time_end</span>
-
$time ; <span style="color: # aa7700;">$time_end</p> <span style="color: #aa7700;">$time_start<code class="php spaces">?
<🎜>
<🎜>
<🎜>?<🎜><span style="color: #ff1493;">echo</span> <span style="color: #0000ff;">"Did is_file in $time secondsn"</span> ;
?>
|
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/」。
?
?
?
?
?
?
?