ホームページ > php教程 > php手册 > PHP のサーバー側機能を構成して PHP のセキュリティを強化する

PHP のサーバー側機能を構成して PHP のセキュリティを強化する

WBOY
リリース: 2016-06-13 12:44:41
オリジナル
728 人が閲覧しました


PHP のサーバー側機能を構成して PHP のセキュリティを強化する

by san@xfocus.org

Shaun Clowes と rfp が PHP および CGI プログラムのプログラミングをより詳しく紹介しています 問題
アプリケーションの脆弱性を介してシステムを突破する方法について、この記事では、PHP のサーバー側の機能をいくつか設定することで PHP のセキュリティを強化します。
CGI スクリプトを作成するときは、さまざまなセキュリティ問題に注意し、ユーザー入力を厳密にフィルタリングする必要があります。しかし、有名なプログラムであっても、靴を濡らさずに海岸を歩くことができたり、ゴマを失わずに食べることができるのでしょうか。 phpnuke や phpMyAdmin などは深刻な
問題を経験しており、ましてや私のようなパンクが書いたスクリプトは同様です。そこで、PHP スクリプトで重大な問題が発生したと仮定します。たとえば、少し前、
phpnuke は PHP スクリプトをアップロードできるかどうかで大きな問題を抱えていました。スクリプト内でそのような問題が発生しないようにサーバーを設定するにはどうすればよいでしょうか。
システムを突破します。

1. コンパイル時に既知の脆弱性へのパッチ適用に注意してください
 4.0.5 以降、PHP のメール関数には 5 番目のパラメータが追加されましたが、PHP アプリケーションが問題を突破できるように適切にフィルタリングされていません。
safe_mode の制限とコマンドの実行。したがって、4.0.5 および 4.0.6 を使用する場合は、コンパイル前に php ソース コード パッケージ内の
ext/standard/mail.c ファイルを変更して、メール関数の 5 番目のパラメーターを無効にするか、シェル文字をフィルターする必要があります。 mail.c ファイルの 152 行目
、これは次の行です:
if (extra_cmd != NULL) {
 の後に extra_cmd=NULL または extra_cmd = php_escape_shell_cmd(extra_cmd) ;次に、php
をコンパイルします。次に、この脆弱性を修正します。

2. php.ini 設定ファイルを変更します
PHP ディストリビューション バージョンの php.ini-dist に基づいて変更を加えます。
1)エラー処理とログ
「エラー処理とログ」セクションでいくつかの設定を行うことができます。最初の検索:
display_errors = On
php はデフォルトでエラー メッセージ表示をオンにします。これを次のように変更します。
display_errors = Off
エラー表示をオフにした後、PHP関数実行エラー情報はユーザーに表示されなくなります。これにより、攻撃者は、少なくともブラック ボックス検出の原因として、スクリプトの物理的な場所やその他の有用な情報を知ることができなくなります。特定の障害物
。これらのエラー メッセージは、指定されたファイルに書き込んでから、次のように変更できます:
log_errors = オン
指定されたファイルで、次の行を見つけます。
;error_log = filename
前のコメントを削除し、ファイル名を /usr/local/apache/logs などの指定したファイルに変更します。 /php_error.log
error_log = /usr/local/apache/logs/php_error.log
このようにして、すべてのエラーが php_error.log ファイルに書き込まれます。
2)セーフモード
PHP のセーフモード関数は、多くの機能を制限または無効にし、PHP のセキュリティ問題を大幅に解決します。
セーフ モード セクションを見つけます:
safe_mode = Off
に変更されました:
safe_mode = On
これにより、safe_mode 機能がオンになります。 shell_exec() や `` など、システムコマンドを実行できる一部の関数は禁止され、exec()、system()、passthru()、popen() などの他の実行関数は制限されます。 指定されたディレクトリ内のプログラムを実行します。
safe_mode_exec_dir によって。いくつかのコマンドまたはプログラムを実際に実行したい場合は、以下を見つけます:
safe_mode_exec_dir =
実行するプログラムのパスを指定します。たとえば、
safe_mode_exec_dir = /usr/ local/php/ exec
次に、使用するプログラムを /usr/local/php/exec ディレクトリにコピーします。これにより、上記のような制限された機能は
 ディレクトリ内のプログラムも実行できるようになります。 。
セーフ モードでの制限された機能の詳細については、メインの PHP サイトの手順を参照してください:
http://www.php.net/manual/en/features.safe-mode。 php
3) disable_functions
一部の関数の有害性が不明で使用しない場合は、単にこれらの関数を無効にします。次の行を見つけます:
disable_functions =
無効にする機能を「=」の後に追加し、複数の機能を「,」で区切ります。

3. httpd.conf を変更します
php スクリプト プログラムの動作を Web ディレクトリ内でのみ許可する場合は、httpd.conf ファイルを変更して php の動作パスを制限することもできます。たとえば、
Web ディレクトリが /usr/local/apache/htdocs の場合、次の行を httpd.conf に追加します。

 php_admin_value open_basedir /usr/local/apache/htdocs

このように、スクリプトが /usr/local/apache/htdocs 以外のファイルを読み込もうとした場合、それは許可されません。エラー表示がオンになっている場合
 次のようなエラーが表示されます:
 警告: ファイルが
の間違ったディレクトリにあります /usr/local/apache/htdocs/ open.php の 4 行目
お待ちください。

4. PHP コードのコンパイル
Zend は PHP に多大な貢献をしており、php4 のエンジンは Zend に基づいており、ZendOptimizer と ZendEncode
およびその他の多くの PHP 拡張機能も開発しました。コンポーネント。オプティマイザー ZendOptimizer は、http://www.zend.com に登録するだけで無料で入手できます。
以下は、4.0.5 および 4.0.6 のファイル名です。
ZendOptimizer-1.1.0-PHP_4.0.5-FreeBSD4.0-i386.tar.gz ZendOptimizer-1.1.0-PHP_4.0.5-Linux_glibc21-i386.tar.gz
ZendOptimizer-1.1 。 0-PHP_4.0.5-Solaris-sparc.tar.gz
ZendOptimizer-1.1.0-PHP_4.0.5-Windows-i386.zip
オプティマイザーのインストールは非常に便利で、詳細な手順が記載されていますパッケージにイラストが載っています。 UNIX バージョンを例として、オペレーティング システムを明確に確認し、パッケージ内の
ZendOptimizer.so ファイルを /usr/local/lib の下にあると想定してディレクトリに抽出します。 php.ini に次の 2 つの文を追加します。
zend_optimizer.optimization_level=15
zend_extension="/usr/local/lib/ZendOptimizer.so"
以上です。 phpinfo() を使用して、Zend アイコンの左側に次のテキストを表示します:
Zend Optimizer v1.1.0、著作権 (c) 1998-2000、Zend Technologies による
これで、オプティマイザは無事にマウントされました。
ただし、コンパイラ ZendEncode は無料ではありません。これは http://www.PHPease.com の Ma Yong によって設計されたコンパイラ シェルです。
商用目的で使用する場合は、http: Contact に問い合わせてください。 //www.zend.com でライセンス契約を取得します。
PHP スクリプトがコンパイルされると、スクリプト ファイルでは文字化けが発生するだけで、攻撃者がサーバー上のスクリプト プログラムをさらに分析できなくなります。 このスクリプトはもともと PHP で書かれています。mysql パスワードなど、スクリプト内に平文で保存されたパスワードも機密として保持されます。ただし、サーバー上でスクリプトを変更するのは面倒です
。ローカルで変更してからアップロードすることをお勧めします。

5. ファイルおよびディレクトリの権限設定
アップロードディレクトリを除き、Web ディレクトリ内の他のディレクトリおよびファイルに対する権限は、nobody ユーザーに書き込み権限を与えないようにする必要があります。そうしないと、攻撃者がホームページ ファイルを
変更する可能性があるため、Web ディレクトリのアクセス許可を適切に設定する必要があります。
また、セーフモードでファイルを読み取る機能は、読み取りファイルの所有者に制限されているため、php スクリプトの所有者は root であってはなりません。
現在実行中のスクリプトの所有者は、読み取ります。そうでない場合、エラー表示がオンになっていると、次のようなエラーが表示されます:
警告: セーフ モード制限が有効です。uid が 500 のスクリプトは、/etc にアクセスできません。 /usr/local/apache/htdocs/open.php の uid 0 が所有する /passwd
行 3
この方法で、/etc/passwd などの多くのシステム ファイルが読み取られるのを防ぐことができます。 、など。
アップロード ディレクトリとアップロード スクリプトの所有者も同じに設定する必要があります。そうしないと、セーフ モードでエラーが発生します。

6. Mysql の起動権限の設定
Mysql は root で起動しないように注意してください。別の mysqladm ユーザーを作成するのが最善です。 /etc/rc.local などのシステムの起動スクリプトに次の文を追加できます:
su mysqladm -c "/usr/local/mysql/share/mysql/mysql.server start"
Thisシステムの再起動後、mysql プロセスが mysqladmin ユーザーとして自動的に開始されます。

7. ログ ファイルとアップロード ディレクトリの確認
このような大きなログ ファイルから攻撃の痕跡を見つけるのは、干し草の山から針を探すようなものです。そしてそれは存在しないかもしれない。
Web によってアップロードされたディレクトリ内のファイルも頻繁にチェックする必要があります。プログラムに問題があり、ユーザーが実行スクリプト
スクリプトなどの違法なファイルをアップロードした可能性があります。

8. オペレーティング システム自体のパッチ
同様に、システム内の既知の脆弱性にパッチを適用することは、システム管理者の最も基本的な責任であり、最後の防御線でもあります。

上記の設定後は、難攻不落とは言えませんが、PHP スクリプト プログラム
が重大な問題を抱えている場合でも、攻撃者のテストにかなりの問題を引き起こしました。脆弱性のため、攻撃者はそれを実際に破壊することはできません。
もっと奇妙で倒錯的な設定方法がある場合は、共有していただければ幸いです;) (出典: viphot)

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート