ホームページ  >  記事  >  类库下载  >  PHP のセキュリティを強化するために PHP のいくつかのサーバー側機能を構成する

PHP のセキュリティを強化するために PHP のいくつかのサーバー側機能を構成する

高洛峰
高洛峰オリジナル
2016-10-14 10:14:451249ブラウズ

Shaun Clowes と rfp は、プログラミング プロセス中に PHP および CGI プログラムが遭遇する問題と、アプリケーションの脆弱性を通じてシステムを突破する方法について詳しく紹介しました。この記事では、PHP の
サーバー側機能のいくつかについて説明します。 PHP のセキュリティを設定および強化します。 CGI スクリプトを作成するときは、さまざまなセキュリティ問題に注意し、ユーザー入力を厳密にフィルタリングする必要があります。しかし、どうすれば靴を濡らさずに海岸を歩くことができるのでしょうか。私のようなギャングが書いたスクリプトは言うまでもなく、phpnuke、phpMyAdmin、その他のプログラムには深刻な問題があります。そこで、php スクリプトで重大な問題が発生したと仮定します。たとえば、少し前に、phpnuke で php スクリプトのアップロードに大きな問題が発生しました。そのような問題が発生した場合、スクリプトがシステムを突破しないようにサーバーを設定するにはどうすればよいでしょうか。

1. コンパイル時に既知の脆弱性のパッチに注意してください

4.0.5 以降、PHP のメール関数には 5 番目のパラメーターが追加されましたが、これは適切にフィルタリングされないため、PHP アプリケーションはセーフモードの制限を突破できます。したがって、4.0.5 と 4.0.6 を使用する場合は、コンパイルする前に、php ソース コード パッケージ内の ext/standard/mail.c ファイルを変更して、mail 関数の 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 Web サイトの手順を参照してください:
[url]http://www.php.net/manual/en/features.safe-mode.php[/url ]

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 は、[url]http://www.zend.com[/url] ].1.0-PHP_4.0.5-FreeBSD4.0-i386.tar.gz
ZendOptimizer-1 に登録するだけで無料で使用できます。 [1].1.0-PHP_4.0.5-Linux_glibc21-i386.tar.gz
ZendOptimizer-1[1].1.0-PHP_4。0.5-Solaris-sparc.tar.gz
ZendOptimizer-1[1].1.0-PHP_4。 0.5-Windows-i386.zip


オプティマイザーのインストールは非常に便利で、パッケージには詳細な手順が記載されています。 UNIX バージョンを例として、オペレーティング システムを明確に確認し、パッケージ内の ZendOptimizer.so ファイルをディレクトリに抽出します (/usr/local/lib であると想定) 2 つの文を php.ini に追加します:
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 は無料ではありません。これは Ma Yong によって設計された [url]http://www.PHPease.com[/url]... Mi Jiantao の Kangmo胗?/a > [url]http: //www.zend.com[/url] ライセンス契約を取得するには、お問い合わせください。

PHP スクリプトがコンパイルされると、スクリプトの実行速度が大幅に向上します。スクリプト ファイルでは文字化けが確認されるだけで、攻撃者がサーバー上のスクリプト プログラムや元々のパスワードをさらに分析することができなくなります。 PHP スクリプトにクリア テキストで保存された情報 (mysql パスワードなど) も失われます。ただし、サーバー側でスクリプトを変更するのは面倒なので、ローカルで変更してからアップロードする方が良いでしょう。


5. ファイルとディレクトリの権限設定

アップロードディレクトリを除き、Webディレクトリ内の他のディレクトリとファイルの権限は、nobodyユーザーに書き込み権限を与えてはなりません。そうしないと、攻撃者がホームページ ファイルを変更する可能性があるため、Web ディレクトリのアクセス許可を適切に設定する必要があります。また、php スクリプトの所有者は root であってはなりません。セーフモードでのファイルの読み取り機能は、読み取りファイルの所有者が現在実行中のスクリプトの所有者と同じである必要があるためです。そうしないとエラーが表示されます。次のようなエラーが表示されます:

警告: セーフ モード制限が有効です。uid が 500 のスクリプトは、/usr/local/apache の uid 0 が所有する /etc/passwd にアクセスできません。 3 行目の /htdocs/open.php
この方法で、/etc/passwd などの多くのシステム ファイルが読み取られるのを防ぐことができます。

アップロード ディレクトリとアップロード スクリプトの所有者も同じに設定する必要があります。そうしないと、safe_mode でエラーが発生します。

6. Mysql の起動許可設定


Mysql は root で起動しないように注意してください。別の mysqladm ユーザーを作成するのが最善です。 /etc/rc.local のような文をシステム起動スクリプトに追加できます:
su mysqladm -c "/usr/local/mysql/share/mysql/mysql.server start"

このようにして、mysqladmin は次のようになります。システムの再起動後に自動的に使用されます。 ユーザーが mysql プロセスを開始します。

7. ログ ファイルとアップロード ディレクトリの確認と

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

8. オペレーティング システム自体のパッチ

同様に、システム内の既知の脆弱性にパッチを適用することは、システム管理者の最も基本的な責任であり、最後の防御線でもあります。


上記の設定後は、難攻不落とは言えませんが、PHPスクリプトプログラムに重大な脆弱性があったとしても、攻撃者のテストにある程度の支障をきたすことはありません。実際に損害を与える可能性があります。

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

関連記事

続きを見る