Я защитил свой сервер с помощью «mod_security2» и изменил заголовок «Server:» на другое значение. Там написано: «Сервер: пример сервера».
Я использовал следующие опции mod_security:
ServerTokens Full
SecServerSignature exampleserver
Побочным эффектом является то, что $_SERVER["SERVER_SOFTWARE"]
также равен "exampleserver".
Поэтому типичный код для определения типа сервера больше не работает :
if( strpos( $_SERVER['SERVER_SOFTWARE'], 'Apache') !== false)
echo 'Have Apache';
else
echo 'Have some other server';
При проверке информации, доступной из PHP, я обнаружил, что у этой конкретной установки PHP7 есть расширение "apache2handler", загруженное в Apache.
Итак, я обновил свой тест до:
$isApache= extension_loaded('apache2handler')
||(strpos(getenv('SERVER_SOFTWARE'),'Apache')!==false);
Есть ли лучший способ определить тип сервера внутри PHP, когда $_SERVER['SERVER_SOFTWARE']
недоступен?