현재 위치: > 최신 기사 목록> php_uname ()로 인한 정보 유출을 피하는 방법

php_uname ()로 인한 정보 유출을 피하는 방법

M66 2025-06-02

PHP에서 php_uname () 함수는 PHP 스크립트를 실행하는 운영 체제 정보를 얻는 데 사용됩니다. 이 기능은 디버깅 및 시스템 관리에 매우 유용하지만 정보 유출의 잠재적 위험이 될 수 있습니다. 공격자는이 데이터를 사용하여 서버의 자세한 환경 정보를 얻어 추가 공격을 수행 할 수 있습니다. 따라서 php_uname () 가 가져온 보안 위험을 합리적으로 방지하는 것이 특히 중요합니다.

이 기사는 php_uname () 의 위험에서 시작하여 효과적인 보안 조치를 설명하여 개발자 가이 기능을 안전하게 사용할 수 있도록 도와줍니다.

1. php_uname ()의 위험을 이해합니다.

php_uname () 에서 반환 한 컨텐츠에는 일반적으로 운영 체제 이름, 호스트 이름, 버전, 릴리스 번호 등과 같은 정보가 포함되어 있습니다.이 정보가 무단 사용자에게 노출되면이 정보는 다음과 같습니다.

  • 공격자가 특정 시스템 취약점에 대한 공격을 시작하는 데 도움이되는 서버 유형 및 버전을 공개합니다.

  • 네트워크 스캔 및 침입을 용이하게하기 위해 네트워크 구조에 대한 단서를 제공합니다.

  • 민감한 정보 유출의 위험을 증가시키고 시스템의 보안 보호 효과를 줄입니다.

예를 들어:

 echo php_uname();

이것은 다음과 같은 것을 출력 할 수 있습니다.

 Linux server1.m66.net 5.4.0-42-generic #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 x86_64

이것으로부터, 당신은 공격자에게 매우 귀중한 정보 인 운영 체제 유형과 커널 버전을 볼 수 있습니다.

2. php_uname () 결과를 직접 출력하지 마십시오

그것을 방지하는 가장 쉬운 방법은 php_uname () 의 결과를 프론트 엔드 페이지 또는 API 응답에 직접 출력하지 않도록하는 것 입니다. 서버 정보를 실제로 얻어야하는 경우 일반 사용자가 정보에 액세스하지 않도록해야합니다.

예:

 // 오류 데모:직접 출력,가능한 정보 유출
echo php_uname();

// 개선 시연:관리자에게만 액세스 할 수 있습니다
session_start();
if (isset($_SESSION['is_admin']) && $_SESSION['is_admin'] === true) {
    echo php_uname();
} else {
    echo "시스템 정보에 액세스 할 수있는 권한이 없습니다";
}

3. 액세스 컨트롤을 사용하여 통화 권한을 제한합니다

사용자 권한 확인 메커니즘과 결합하여 php_uname ()을 호출하고 출력을 볼 수있는 사용자 역할을 엄격히 제한합니다. 관리자 만 액세스하도록 관련 인터페이스 또는 페이지를 설정하는 것이 좋습니다.

샘플 코드 :

 function getServerInfo() {
    // 관리자 액세스 만 허용합니다
    session_start();
    if (!isset($_SESSION['user_role']) || $_SESSION['user_role'] !== 'admin') {
        http_response_code(403);
        exit('접근 불가');
    }

    return php_uname();
}

4. 민감한 정보를 필터하고 필요한 컨텐츠 만 노출시킵니다

실제로 사용자에게 일부 서버 정보를 표시 해야하는 경우 민감한 필드를 제거하기 위해 PHP_UNAME () 의 출력을 필터링하고 특정 커널 버전의 누출을 피하는 것이 좋습니다.

 $fullInfo = php_uname();
$parts = explode(' ', $fullInfo);

// 운영 체제 및 호스트 이름 만 유지됩니다,커널 버전 및 기타 세부 사항을 차단하십시오
$filteredInfo = $parts[0] . ' ' . $parts[1];
echo $filteredInfo;

출력 예 :

 Linux server1.m66.net

5. PHP 환경을 구성하고 기능 호출 비활성화 (특수 환경에 적용 가능)

보안 요구 사항이 매우 높은 생산 환경에서는 php_uname ()을 포함하여 php.ini 구성을 통해 민감한 기능을 비활성화 할 수 있습니다.

 disable_functions = php_uname

이런 식으로 코드에서 호출 되더라도 함수가 실행되지 않아 누출 위험이 줄어 듭니다. 그러나 이것은 종속 시스템 정보의 정상적인 기능에 영향을 줄 수 있습니다.

6. 로그 감사 및 모니터링

PHP_UNAME ()- 관련 인터페이스에 액세스하는 로그를 모니터링하고 기록하면 비정상적인 액세스 동작을 발견하고 적시에 잠재적 인 위협에 대응하는 데 도움이됩니다.

샘플 로그 쓰기 :

 function logAccess($user) {
    file_put_contents('/var/log/server_info_access.log', date('Y-m-d H:i:s') . " - {$user} accessed server info\n", FILE_APPEND);
}

session_start();
if (isset($_SESSION['user'])) {
    logAccess($_SESSION['user']);
}

7. 요약

안전 조치 설명
직접 출력을 피하십시오 무단 페이지에 php_uname () 결과를 표시하지 않습니다
권한 제어 관리자와 같은 승인 된 사용자 만 전화 및 액세스 권한을 제한합니다.
필터 정보 출력 정보를 필터링하여 민감한 세부 사항을 제거하십시오
기능 호출을 비활성화합니다 php.ini를 통해 php_uname () 함수를 비활성화합니다
로그 감사 및 모니터링 접근 상황을 기록하고 비정상적인 접근을 방지하십시오

권한 제어 및 출력 필터링을 합리적으로 설계하고 로그 모니터링과 협력함으로써 PHP_UNAME () 로 인한 정보 유출 문제를 효과적으로 피할 수 있으며 PHP 응용 프로그램 및 서버의 보안을 보장 할 수 있습니다.

서버 정보를 노출 해야하는 환경을 사용하는 경우 위의 보안 정책을 먼저 고려하여 잠재적 위험을 최소화하십시오.