ApacheモジュールとCGIの間に違いはありますか(セキュリティに関して)?
質問
例えば。 より安全に使用できるか mod_php
の代わりに php-cgi
?それとも、より安全に使用できますか mod_perl
伝統的なものではなく cgi-scripts
?
私は主にセキュリティの問題に関心がありますが、大きな違いがある場合は速度が問題になる可能性があります。
解決
どのような意味でのセキュリティですか?いずれにせよ、それは実際にどのようなスクリプトが実行されているか、そしてそれがどの程度うまく書かれているかに依存します。最近のスクリプトは中途半端で、入力検証を適切に行っていないものが多すぎます。
私は個人的に mod_php よりも FastCGI を好みます。これは、FastCGI プロセスが終了すると新しいプロセスが生成されるのに対し、mod_php が Apache 全体を強制終了するのを見たことがあります。
セキュリティに関しては、FastCGI を使用すると、技術的にはデフォルトの Web サーバー ユーザーとは別のユーザーで php プロセスを実行できます。
別のメモとして、Apache の新しいワーカー スレッド サポートを使用している場合は、拡張機能の一部はスレッド セーフではなく、競合状態を引き起こす可能性があるため、mod_php を使用していないことを確認する必要があります。
他のヒント
独自のサーバーを実行する場合は、モジュール方式で実行すると、多少高速になります。共有サーバーを使用している場合、決定は通常 CGI 側ですでに行われています。この理由は、ファイルシステムのアクセス許可にあります。モジュールとしての PHP は、http サーバー (通常は「apache」) の権限で実行されます。そのユーザーにスクリプトを chmod できない限り、スクリプトを 777 (世界中で読み取り可能な) に chmod する必要があります。これは、悲しいことに、サーバーの隣人がそれらを閲覧できることを意味します。データベース アクセス パスワードを保存する場所を考えてください。ほとんどの共有サーバーは、スクリプト所有者の権限でスクリプトを実行する phpsuexec などを使用してこの問題を解決しているため、コードを 644 に chmod することができます (必須)。Phpsuexec は CGI として PHP を使用してのみ実行されます。多かれ少なかれ、それはすべてであり、単なるローカル マシンのものであり、世界全体にとっては何の違いもありません。
ほとんどのセキュリティ ホールは、スクリプト自体の不適切なプログラミングによって発生します。そのため、セキュリティ ホールが CGI として実行される場合やモジュール内で実行される場合には、まったく意味がありません。とはいえ、Apache モジュールは Web サーバー全体をクラッシュさせる可能性があり (特にスレッド MPM を使用している場合)、mod_php はそのことで有名です。
CGI は遅くなりますが、現在では主に FastCGI などの解決策があります。
あなたの脅威モデルは何ですか?
PHP 5.2.6 の PHP install.txt ドキュメントから:
サーバーモジュールは、CGIバイナリと比較して、パフォーマンスと追加の機能を大幅に向上させます。
IIS/PWS の場合:
警告
CGIセットアップを使用することにより、サーバーはいくつかの可能な攻撃に対して開かれています。これらの攻撃から身を守る方法を学ぶために、CGIセキュリティセクションをお読みください。
mod_php や FastCGI などのモジュールは、通常の CGI よりも信じられないほど高速です。CGIはやらないでください。他の人が言っているように、PHP プログラム自体がセキュリティ上の最大の脅威ですが、共有ホスト上では別の考慮事項があることは無視されています。
スクリプトが他の PHP プログラムと共有ホスト上にあり、そのホストがセーフ モードで実行されていない場合は、すべてのサーバー プロセスが同じユーザーとして実行されている可能性があります。これは、他のすべての PHP スクリプトが、データベースのパスワードを含む独自の PHP スクリプトを読み取ることができることを意味する可能性があります。したがって、必ずサーバー構成を調査して、コードが他の人に読み取れないことを確認してください。
自分のホスティングを制御している場合でも、サーバー上のハッキングされた別の Web アプリケーションが他の Web アプリケーションへの経路となる可能性があることに留意してください。
組み込みモジュールを使用すると、CGI を使用するよりも確実に高速になります。セキュリティへの影響は構成によって異なります。デフォルト設定ではそれらはほぼ同じですが、cgi では、特に共有ホスティングのコンテキストにおいて、組み込みモジュールでは提供できないより安全な設定が可能です。正確に何から身を守りたいですか?