ホームページ  >  記事  >  バックエンド開発  >  PHP_PHP チュートリアルのサーバー側機能を構成して PHP のセキュリティを強化する

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

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


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 = Off
次のように変更します。
log_errors = On
次の行を見つけます:
;error_log = filename
前のコメントを削除し、ファイル名を /usr/local/apache/logs/php_error.log などの指定したファイルに変更します
error_log = /usr /local/apache /logs/php_error.log
このようにして、すべてのエラーが php_error.log ファイルに書き込まれます。
2)セーフモード
phpのsafe_mode関数は、多くの機能を制限または無効にし、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 以外のファイルを読み込もうとした場合、エラーが表示されると、それは許可されません。次のようなプロンプトが表示されます。 エラー:
警告: open_basedir 制限が有効です。ファイルは
/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 アイコンの左側に次のテキストを表示します。
with Zend Optimizer v1.1.0、Copyright (c) 1998-2000、by Zend Technologies
これで、オプティマイザーは正常に接続されました。
ただし、コンパイラ ZendEncode は無料ではありません。これは http://www.PHPease.com の Ma Yong によって設計されたコンパイラ シェルです。商用目的で使用する場合は、http://www にお問い合わせください。 .com にアクセスしてライセンス契約を取得してください。
PHP スクリプトがコンパイルされると、スクリプト ファイルでは文字化けが発生するだけで、攻撃者がサーバー上のスクリプト プログラムをさらに分析することができなくなります。 mysql パスワードなど、保存されたパスワードも機密に保たれます。ただし、サーバー側でスクリプトを変更するのは面倒なので、ローカルで変更してからアップロードすることをお勧めします。

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

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

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

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

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

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/314471.html技術記事 san@xfocus.org によって PHP のいくつかのサーバー側機能を構成することにより、PHP のセキュリティを強化します。 以前、Shaun Clowes と rfp が、PHP および CGI プログラムのプログラミング プロセスで遭遇する問題について詳しく紹介しました...

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