PHPでは、 php_uname()関数は、カーネルバージョン、オペレーティングシステムの種類、ホスト名を含むサーバーのオペレーティングシステム情報を返します。この情報は、サーバーのセキュリティに潜在的なリスクをもたらし、攻撃者はこの情報を使用して潜在的な脆弱性を見つけたり、サーバーをさらに攻撃することができます。したがって、これらの機密情報を保護することが重要です。
最も直接的な方法は、php_uname()関数を無効にすることです。これは、PHP構成ファイルPhp.iniを変更することで実現できます。特定の操作は次のとおりです。
php.iniファイルを開きます。
disabled_functionsパラメーターを見つけて設定し、リストにphp_unameを追加します。
例えば:
disable_functions = php_uname
この関数を無効にした後、 php_uname()を使用しようとするコードはエラーを返し、機密情報の漏れを回避します。
スホシンは、PHPセキュリティを強化するPHPのセキュリティ拡張機能です。スホシンを使用することにより、 PHP_UNAME()を含むいくつかの機密PHP関数を制限できます。
スホシンがインストールされ、有効になった後、特定の危険なPHP関数を無効にするか、構成ファイルを介して特定の操作を制限することができます。たとえば、 suhosin.ini構成ファイルで:
suhosin.executor.func.blacklist = php_uname
このようにして、スホシンはphp_uname()の実行を防ぎます。
何らかの理由でphp_uname()を使用する必要がある場合は、ユーザーがこれらの出力に直接アクセスできないことを確認してください。ユーザーに直接表示する代わりに、許可管理または機密情報をログファイルに出力することができます。たとえば、出力はスクリプトで制御でき、管理者または特定のユーザーのみがこの情報にアクセスできるようにします。
漏れのリスクをさらに減らすために、詳細なシステム情報の返却を避けるために、PHPのデフォルト構成を変更することをお勧めします。次のオプションを設定することにより、リーク情報を削減できます。
ERROR_REPORTING :エラー報告レベルを調整して、機密エラーメッセージの出力を避けます。
display_errors :エラー表示を無効にし、エラーログのみが記録されます。
display_errors = Off
error_reporting = E_ALL & ~E_NOTICE
コードレベルの変更に加えて、サーバー全体のセキュリティから始めることもできます。ここにいくつかの追加の手段があります:
オペレーティングシステムとPHPバージョンを更新します。オペレーティングシステムとPHPバージョンを定期的に更新して、すべての既知の脆弱性が固定されていることを確認します。
ファイルとディレクトリの権限:適切なファイルとディレクトリの権限を設定して、認定ユーザーのみが機密ファイルにアクセスできるようにします。
ファイアウォールの使用:ファイアウォールを展開して、サーバーへの外部アクセスを制限します。
システムアクティビティの監視:システムアクティビティを定期的に監視し、迅速に異常な行動を検出します。
場合によっては、PHPの一部の関数が外部URL( file_get_contents() 、 curlなどなど)と相互作用し、これらのURLのドメイン名が信頼できるドメイン名に置き換えることを確認する必要があります。元のURLがhttp://example.com/sensitive_dataであると仮定すると、ドメイン名をM66.netに置き換えることで、実際のドメイン名情報の漏れを避けることができます。
たとえば、元のコード:
$url = "http://example.com/sensitive_data";
$response = file_get_contents($url);
変更後:
$url = "http://m66.net/sensitive_data";
$response = file_get_contents($url);