ホームページ >バックエンド開発 >PHPチュートリアル >lnmp での PHP セキュリティ設定の詳細説明 (安全でない PHP 機能の無効化、PHP アップロードの分離など)
この記事では、安全でない PHP 機能の無効化、PHP エラー ログの無効化、PHP アップロードの分離、PHP 情報の無効化、リンク ライブラリの動的読み込みの無効化、リモート URL を開くことの無効化、およびその他のセキュリティ対策を含む、lnmp アーキテクチャでの PHP セキュリティ設定の方法を紹介します。 。
PHP セキュリティ構成のいくつかの側面: 1. open_basedir を使用して仮想ホストのディレクトリ間のアクセスを制限する [ホスト=www.xingzuo51.com] open_basedir=/data/site/www.xingzuo51.com/:/tmp/ [HOST=test.xingzuo51.com] open_basedir=/data/site/test.xingzuo51.com/:/tmp/手順: www.xingzuo51.com の PHP プログラムは、open_basedir で構成された 2 つのディレクトリに制限されており、他のディレクトリにはアクセスできません。 上記の設定が行われていない場合、test.xingzuo51.com と www.xingzuo51.com のプログラムが相互にアクセスできます。 いずれかのサイトに脆弱性があり、ハッカーが Web シェルを埋め込んだ場合、このサイトを使用して同じサーバー上の他のサイトをダウンさせ、最終的にトロイの木馬をインストールすることができます。 注: ディレクトリの最後に / を追加する必要があります。 たとえば、/tmp と記述すると、サイトには /tmp123 や /tmp で始まる他のディレクトリも存在するため、ハッカーはこれらのディレクトリにもアクセスできます。また、php5.3 以降ではこの書き込み方法がサポートされていますが、5.2 ではサポートされていません。 2. 安全でない PHP 関数を無効にする disable_functions = show_source,system,shell_exec,passthru,exec,popen,proc_open,proc_get_status,phpinfo PHP は、上記の PHP 関数を実行することを禁止されています。上記の PHP プログラムは、ping、netstat、mysql などの Linux コマンドを実行できます。システムに権限昇格のバグがある場合は、その結果がわかります。 3. ソフトウェアのセキュリティ情報に注意する Linux カーネル、PHP セキュリティ、その他の情報に積極的に注意を払い、エラーに対してタイムリーに対処してください4. PHP ユーザーは読み取り専用です。 この方法は私が最も推奨する方法ですが、実行する前に PHP エンジニアと話し合う必要があります。たとえば、サイト www.xingzuo51.com のルート ディレクトリ内のユーザーとグループはEveryone であり、php を実行しているユーザーとグループは phpuser です。ディレクトリのアクセス許可は 755、ファイルのアクセス許可は 644 です。このように、php は読み取り専用となり、サイト ディレクトリにファイルを書き込むことはできません。つまり、たとえ抜け穴があっても、ハッカーがバックドアを通過することはできず、ましてやトロイの木馬をインストールすることはできません。これを行う前に、ファイル キャッシュを NoSQL メモリ キャッシュ (memcached、redis など) に変更するようにプログラマに指示します。 .)、アップロードされたファイルはインターフェイスを通過して他のサーバー (静的サーバー) に渡されます。 注: ローカル キャッシュを生成するようにプログラムするのは非常に悪い習慣です。ファイル キャッシュの使用は遅く、ディスク領域を無駄にします。そして最も重要なことは、通常の状況ではサーバーが水平方向に拡張できないことです 5. PHPエラーログを閉じる 表示エラー = オン への変更 表示エラー = オフ プログラムでエラーが発生すると、パスを含む詳細なエラー情報がユーザーにすぐに表示され、場合によってはデータベース アカウントのパスワードも基本的にこのエラー レポートを通じて推測されます。本番環境では強力にオフにしてください6. PHP アップロードの分離 nfsなどのリモートサーバーにファイルをアップロードします。もちろん、アップロードの脆弱性があっても、ファイルは静的サーバーに転送されますので、作成した PHP インターフェイスを呼び出すこともできます。トロイの木馬やその他のファイルはまったく実行できません。 例: php サイト www.xingzuo51.com、ディレクトリ/data/site/www.xingzuo51.com 静的ファイル サイト static.xingzuo51.com、ディレクトリ/data/site/static.xingzuo51.com ファイルは /data/site/static.xingzuo51.com に直接転送されました。アップロードされたファイルには www.xingzuo51.com からのみアクセスできますが、static.xingzuo51.com からはアクセスできません。 php をサポートします 7.php情報を閉じます。 エクスポーズ_php = オン への変更 エクスポーズ_php = オフ ハッカーがこのバージョンの PHP に対して攻撃を仕掛けることを防ぐために、PHP のバージョン情報を安易に開示しないでください。8. リンクライブラリの動的読み込みを無効にする disable_dl = オン; への変更 イネーブル_dl = オフ; 9. リモート URL を開くことを無効にするallow_url_fopen = オン への変更 allow_url_fopen = オフ 実際には、これは実際には安全ではなく、Web 侵入などの問題にはつながりませんが、これは狭義のセキュリティ問題であると著者は考えています。以下のメソッドではリモートURLコンテンツを取得できません $data = file_get_contents("http://www.baidu.com/");ローカルファイルのコンテンツを取得します: $data = file_get_contents("1.txt");サイトのトラフィックが大きくなく、データベースは正常に実行されているが、Web サーバーの負荷が驚くほど高い場合は、この方法が利用可能かどうかを直接確認してください。 php はリモート Web のコンテンツを取得します。curl を使用することをお勧めします。 |