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 () 등).
WAF (Web Application Firewall)를 사용하여 악의적 인 요청을 감지하고 방지합니다.
시스템 및 응용 프로그램의 보안 패치를 정기적으로 업데이트하십시오
공인 사용자 만 민감한 정보에 액세스 할 수 있도록 서버 구성 강화
서버의 전반적인 보안을 향상시키기 위해 가상화 기술, 컨테이너화 된 배포 (예 : Docker) 또는 클라우드 서비스 제공 업체의 보안 보호 기능을 사용할 수 있습니다. 이런 식으로 공격자가 특정 정보를 얻더라도 전체 시스템에 더 해를 끼치는 것은 어렵습니다.
php_uname ()을 비활성화하면 운영 체제 정보를 노출 할 위험이 줄어들지 만 모든 보안 문제 만 해결하지는 않습니다. 이 기능을 비활성화하는 것을 고려할 때 개발자는 적절한 대응 전략을 가져 오는 위험과 잠재적 영향을 평가해야합니다. 가장 중요한 것은 Php_uname ()을 비활성화하는 데 다른 보안 조치와 함께 사용되어 시스템의 전반적인 보안을 보장해야합니다.