PHPアプリケーション開発では、 PHP_UNAME()関数は一般的に使用されるシステム情報取得関数です。ただし、オペレーティングシステム名、バージョン番号などを含むサーバーオペレーティングシステムの詳細情報を返します。ただし、セキュリティ上の理由により、多くの開発者またはシステム管理者は、サーバー情報を公開するリスクを減らすために関数を無効にすることを選択します。しかし、 php_uname()を無効にする必要がありますか?この記事では、この機能を無効にし、この問題に対処する方法を議論するためにもたらされるリスクを分析します。
PHP_UNAME()関数は、現在実行されているPHPスクリプトのオペレーティングシステム情報を返すために使用されます。この機能を通じて、開発者は次のようなオペレーティングシステムに関する詳細情報を取得できます。
オペレーティングシステムの名前(LinuxやWindowsなど)
オペレーティングシステムバージョン番号
オペレーティングシステムバージョン情報
サンプルコード:
<?php
echo php_uname();
?>
このコードの出力は次のとおりです。
Linux myserver 4.15.0-135-generic #139-Ubuntu SMP Wed Apr 8 12:14:16 UTC 2020 x86_64
php_uname()はオペレーティングシステムの詳細を公開するため、これは攻撃者に手がかりを提供する可能性があります。攻撃者はこの情報を使用して、適切な脆弱性または攻撃方法を選択できます。たとえば、攻撃者は、システムがLinuxオペレーティングシステムであることを知っており、特定のバージョン番号を知っている場合、そのバージョンに知られている脆弱性を悪用しようとする場合があります。
したがって、多くのシステム管理者と開発者は、PHP_UNAME()を無効にすることはサーバーのセキュリティを強化するための効果的な手段であると考えています。この機能を無効にすることにより、外部攻撃者がシステム情報を取得する機会を少なくともある程度まで減らすことができます。
ただし、 php_uname()の無効化にはリスクがないわけではありません。ここにいくつかの潜在的なリスクと影響があります:
PHP_UNAME()は、特にデバッグやトラブルシューティングの場合、システムに関する重要な情報を提供します。この機能が無効になっている場合、開発者はシステムの問題を特定するのに役立つツールの一部を失います。たとえば、場合によっては、開発者は特定の環境にデバッグするために、サーバーのオペレーティングシステム情報をすばやく理解する必要がある場合があります。
多くのPHPサードパーティライブラリまたはツールは、最適化または調整のためにシステム情報を取得するためにphp_uname()に依存しています。たとえば、一部のPHP拡張機能は、適切な構成を選択するためにシステムタイプに依存する必要がある場合があります。 php_uname()が無効になっている場合、これらのツールは正しく機能しないため、アプリケーションの通常の操作に影響します。
PHP_UNAME()の無効化は、オペレーティングシステム情報の外部取得のみを回避できますが、攻撃者が他のシステム情報を取得することを根本的に妨げません。たとえば、攻撃者は、他のチャネルを介してサーバー情報を取得できます(サーバーのHTTP応答ヘッダーの表示、ログファイルなど)。したがって、システムセキュリティを確保するために、 php_uname()の無効化に依存することは非現実的です。
php_uname()を無効にすることにした場合、それがもたらすリスクを軽減し、アプリケーションが適切に機能することを確認するために実行できるいくつかの手順があります。ここにいくつかの実行可能な戦略があります:
PHP_UNAME()は、 PHPのPHP.ini構成ファイルを変更することで無効にできます。 php.iniに次の構成を追加します。
disable_functions = php_uname
これにより、 php_uname()関数の使用が無効になるため、外部アクセスが防止されます。
アプリケーションがPHP_UNAME()に依存してオペレーティングシステム情報を取得する場合は、安全な代替品を提供することを検討してください。たとえば、開発者は、ビジネスニーズに応じてオペレーティングシステムの種類を手動で構成し、 php_uname()に依存する代わりに環境変数に保存できます。
単にPHP_UNAME()を無効にするだけでは、システムの完全なセキュリティを確保するのに十分ではありません。次のような他の安全対策と協力することをお勧めします。
他の不要なPHP関数( exec() 、 shell_exec()など)を無効にします
Webアプリケーションファイアウォール(WAF)を使用して、悪意のあるリクエストを検出および防止する
システムとアプリケーションのセキュリティパッチを定期的に更新します
承認されたユーザーのみが機密情報にアクセスできるようにするためにサーバー構成を強化する
サーバーの全体的なセキュリティを改善するために、仮想化テクノロジー、コンテナ化された展開(Dockerなど)、またはクラウドサービスプロバイダーのセキュリティ保護機能を使用できます。このようにして、攻撃者が特定の情報を取得したとしても、システム全体をさらに害することは困難です。
PHP_UNAME()を無効にすると、オペレーティングシステム情報を公開するリスクが減りますが、すべてのセキュリティの問題だけを解決しません。この機能を無効にすることを検討する場合、開発者はリスクと潜在的な影響を比較検討し、適切な対応戦略をもたらし、採用する必要があります。最も重要なことは、システムの全体的なセキュリティを確保するために、 Php_uname()を他のセキュリティ対策とともに使用する必要があることです。