PHP+MySQL+Apacheが非常に人気のあるWebテクノロジーであることは明らかです。この組み合わせは強力でスケーラブルで、まだ無料です。ただし、PHPのデフォルト設定は、すでにオンラインであるWebサイトには適していません。以下では、デフォルトの構成ファイルを変更することにより、PHPセキュリティポリシーを強化できます!
0x01:リモートURLファイル処理機能を無効にします
ファイルのRULパラメーターを受け入れるFOPENのファイル処理機能(たとえば、FOPEN( 'http://www.yoursite.com'、'r'))と同様に、この関数はリモートリソースに簡単にアクセスできます。ただし、これは非常に重要なセキュリティの脅威です。ファイル関数を制限するためにこの関数を無効にすることは良い選択です。 php.iniファイルで次の変更を行います。
コードコピーは次のとおりです。
Allow_url_fopen = off
0x02:グローバル変数の登録を無効にします
4.2.0以前のバージョンでは、PHPは入力としてグローバル変数を使用しました。この関数はregister_globalsと呼ばれます。 Webアプリケーションでは、攻撃者がグローバル変数を簡単に操作できる場合があるため、多くのセキュリティ問題を引き起こしました。幸いなことに、4.2.0の関数はデフォルトで無効になっています。それは非常に危険です。この関数は、いかなる状況でも無効にする必要があります。一部のスクリプトがこの機能を必要とする場合、このスクリプトには潜在的なセキュリティの脅威があります。 PNP.iniを変更して、この関数を無効にします。
コードコピーは次のとおりです。
Register_globals = off
0x03:PHPの読み取りおよび書き込み操作が制限されています
多くのWeb開発プロセスでは、PHPスクリプトは、/var/www/htdocs/filesなどのローカルファイルシステムに操作を読み取りおよび書き込む必要があります。セキュリティを強化するために、ローカルファイルの読み取り許可を変更できます。
コードコピーは次のとおりです。
open_basedir =/var/www/htdocs/files
0x04:ポーズ制限
PHPの実行時間、メモリ使用量、投稿データ、アップロードデータを制限することが最良の戦略であり、次の構成を行うことができます。
コードコピーは次のとおりです。
max_execution_time = 30;最大スクリプト実行時間
max_input_time = 60;入力の解析に費やされた最大時間
memory_limit = 16m; 1つのスクリプトで使用される最大メモリ
upload_max_filesize = 2m;最大ファイルサイズをアップロードします
post_max_size = 8m;最大ポストサイズ
0x05:エラーメッセージを無効にし、ロギングを有効にします
デフォルト設定では、PHPはブラウザにエラーメッセージを出力します。このデフォルト設定は、アプリケーション開発プロセス中の最も合理的な構成です。ただし、インストールパスやユーザー名など、一部のセキュリティ情報をユーザーに漏らすこともできます。開発されたWebサイトでは、エラーメッセージを無効にし、エラーメッセージをログファイルに出力することをお勧めします。
コードコピーは次のとおりです。
display_errors = off
log_errors = on
0x06:PHPファイルを非表示にします
PHPファイルが非表示になっていない場合、さまざまな方法でサーバーPHPのバージョンを取得できます。たとえば、http://www.example.com/script.php?= phpb8b55f2a0-3c92-11d3-a3a9-4c7b08c10000
明らかに、ユーザーにWebサイトサーバーのPHPバージョンを直接取得したくありません。幸いなことに、この関数を無効にできるPHP.iniのスイッチがあります。
コードコピーは次のとおりです。
expose_php = off
0x07:セーフモードの構成
デフォルトでは、PHPはセーフモードで構成できます。このモードでは、Apacheはファイル、環境変数、バイナリプログラムへのアクセスを禁止しています。セーフモードでは、最大の問題は、ファイルの所有者のみがこのPHPファイルにアクセスできることです。多くの開発者がこのプログラムを共同で開発する場合、そのような設定は非現実的です。 PHPファイルにアクセスする必要がある場合は、ファイルの所有者を変更する必要があります。別の問題は、他のプログラムがこれらのPHPファイルにアクセスできないことです。次の構成では、ファイルの権限を1人のユーザーではなくユーザーグループに変更できます。
コードコピーは次のとおりです。
safe_mode = off
safe_mode_gid = on
safe_mode_gidを有効にすることにより、このグループのApacheを使用してPHPファイルにアクセスできます。セーフモードは、バイナリ実行の防止にも非常に効果的ですが、開発者は特定の特定の状況でいくつかのバイナリファイルを実行できるようにしたいと考えています。これらの特別な場合、たとえば(/var/www/binaries)など、バイナリファイルをディレクトリに入れることができ、次の設定を作成できます。
コードコピーは次のとおりです。
safe_mode_exec_dir =/var/www/binaries
最後に、次の設定を介して、サーバーの環境変数にアクセスして、指定されたプレフィックスを持つ環境変数のみにアクセスできる「_」プレフィックスを提供できます。
コードコピーは次のとおりです。
safe_mode_allowed_env_vars = php_
0x08:特定のサフィックス名を持つファイルへのパブリックアクセスを制限する
セキュリティ上の理由により、特定のサフィックス名を持つ多くのファイルには、パブリックユーザーがアクセスできません。たとえば、.incサフィックスを備えたファイルには、MySQL接続情報などの機密情報が含まれています。適切な構成がない場合、すべてのユーザーがこの構成ファイルにアクセスできます。 Webサイトのセキュリティを強化するには、..htaccessファイルで以下を構成する必要があります。
コードコピーは次のとおりです。
<filesmatch>
注文を許可します、拒否
すべてから否定します
</filesmatch>
0x09:要約
PHPのデフォルト構成は、開発者向けです。ウェブサイトが多数のユーザー向けである場合、PHPを再構成することをお勧めします。