PHP에서 php_uname () 함수는 커널 버전, 운영 체제 유형 및 호스트 이름을 포함한 서버의 운영 체제 정보를 반환합니다. 이 정보는 서버의 보안에 잠재적 인 위험을 초래하며 공격자는이 정보를 사용하여 잠재적 인 취약점을 찾거나 서버를 더 공격 할 수 있습니다. 따라서 이러한 민감한 정보를 보호하는 것이 중요합니다.
가장 직접적인 방법은 php_uname () 함수를 비활성화하는 것입니다. PHP 구성 파일 php.ini를 수정하여 달성 할 수 있습니다. 특정 작업은 다음과 같습니다.
php.ini 파일을 엽니 다.
disabled_functions 매개 변수를 찾고 설정하고 목록에 php_uname을 추가하십시오.
예를 들어:
disable_functions = php_uname
이 기능을 비활성화 한 후 PHP_UNAME ()를 사용하려는 모든 코드는 민감한 정보가 누출되지 않도록 오류를 반환합니다.
Suhosin은 PHP 보안을 향상시키는 PHP의 보안 확장입니다. 수호신을 사용하면 php_uname ()을 포함하여 일부 민감한 PHP 기능을 제한 할 수 있습니다.
수호신을 설치하고 활성화 한 후에는 특정 위험한 PHP 기능을 비활성화하거나 구성 파일을 통해 특정 작업을 제한 할 수 있습니다. 예를 들어, suhosin.ini 구성 파일에서 :
suhosin.executor.func.blacklist = php_uname
이러한 방식으로 Suhosin은 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 () , 컬 등과 같은)와 상호 작용할 수 있으며 이러한 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);