현재 위치: > 최신 기사 목록> show_source 함수를 사용하는 동안 경로 트래버스 공격의 보안 위험이 있습니까? 그것을 막는 방법?

show_source 함수를 사용하는 동안 경로 트래버스 공격의 보안 위험이 있습니까? 그것을 막는 방법?

gitbox 2025-06-10

php에서 show_source () 함수 ( highloys_file () 로 별명)는 지정된 파일의 소스 코드를 구문 강조 표시된 형식으로 표시하는 데 사용됩니다. 종종 코드 스 니펫을 디버깅하거나 디스플레이하는 데 사용됩니다. 그러나 show_source ()가 호출 될 때 입력 경로가 엄격하게 검증되지 않으면 경로 트래버스 공격이 트리거되어 민감한 파일이 누출되어 심각한 보안 위험이 발생할 수 있습니다.

경로 트래버스 공격은 무엇입니까?

Path Traversal 공격은 파일 경로 매개 변수를 조작하여 공개해서는 안되는 서버의 파일에 액세스하는 공격자를 말합니다. 공격자는 일반적으로 .../ 비슷한 디렉토리 점프 기호를 사용하고 액세스 제한을 우회하고 시스템 민감한 파일 (예 : /etc/passwd , 구성 파일, 데이터베이스 연결 정보 등)을 읽어 정보 유출을 일으 킵니다.

show_source 기능의 보안 위험

샘플 코드 :

 <?php
if (isset($_GET['file'])) {
    show_source($_GET['file']);
}
?>

$ _get [ 'file'] 의 입력이 필터링되지 않은 경우 공격자는 다음을 요청하여 파일에 액세스 할 수 있습니다.

 http://gitbox.net/script.php?file=../../../../etc/passwd

이로 인해 서버가 /etc /passwd 파일의 내용을 직접 출력하여 심각한 정보 누출이 발생합니다.

경로 횡단 공격을 방지하는 방법은 무엇입니까?

  1. 제한된 액세스 디렉토리 <br> 사전 설정 디렉토리의 파일에만 액세스 할 수 있습니다. 예를 들어, /var/www/html/sources/ 로 액세스 할 수있는 파일의 디렉토리를 정의하면 해당 디렉토리에서 요청해야합니다.

 <?php
$baseDir = '/var/www/html/sources/';
if (isset($_GET['file'])) {
    $file = basename($_GET['file']);  // 파일 이름 만 유지됩니다,디렉토리 교차를 피하십시오
    $path = realpath($baseDir . $file);
    if ($path !== false && strpos($path, $baseDir) === 0 && is_file($path)) {
        show_source($path);
    } else {
        echo "불법 파일 경로!";
    }
}
?>
  1. 입력을 필터링하고 확인하십시오

    • Basename () 함수를 사용하여 경로에서 디렉토리 정보를 제거하십시오.

    • realpath () 와 결합하여 파일의 실제 경로를 확인하여 파일이 지정된 디렉토리에 있는지 확인합니다.

    • 파일이 존재하고 일반 파일인지 확인하십시오.

  2. 사용자의 직접 들어오는 경로를 비활성화하십시오 <br> 사용자가 파일 경로를 직접 통과시키지 않고 사전 정의 된 파일 목록 또는 ID 맵 테이블을 통해 표시 될 파일을 결정하는 것이 가장 좋습니다.

  3. 위험 기능 디스플레이 <br>를 끄십시오 프로덕션 환경에서 소스 코드 디스플레이 기능을 노출시키지 않거나 무단 액세스를 방지하기 위해 권한 제한을 설정하십시오.

요약

show_source () 함수 자체에는 보안 취약점이 없지만 입력 경로를 신중하게 처리하지 않으면 경로 트래버스 공격 및 서버에 민감한 정보를 누출하기가 쉽습니다. 방지하는 열쇠는 사용자가 입력 한 경로를 엄격하게 확인하고 파일 액세스 범위를 제한하며 통과 및 실행되는 경로를 피하는 것입니다. 위의 측정을 통해 경로 트래버스 공격을 효과적으로 예방할 수 있으며 시스템 보안이 보장 될 수 있습니다.