현재 위치: > 최신 기사 목록> GD2 이미지를로드 할 때 경로 트래버스 공격 방지 방법

GD2 이미지를로드 할 때 경로 트래버스 공격 방지 방법

M66 2025-05-18

PHP의 imageCreateFromGD2 함수를 사용하여 GD2 이미지를로드 할 때 입력 경로가 올바르게 처리되지 않으면 경로 트래버스 공격이 발생할 수 있습니다. 공격자는 특정 경로를 구성하여 서버의 민감한 파일에 액세스 할 수 있습니다. 따라서 경로 트래버스 공격을 올바르게 방지하는 것이 매우 중요합니다. 이 기사는 이러한 공격을 효과적으로 예방하는 방법을 설명합니다.

1. 경로 트래버스 공격이란 무엇입니까?

Path Traversal Attack은 공격자가 포함 경로를 구성하여 파일 시스템의 보안 제어를 우회하고 유사한 메소드와 노출되어서는 안되는 파일에 액세스하려고합니다. PHP에서 imageCreateFromGD2 함수가 올바른 검증 경로없이 이미지를로드하면 서버로드에 민감한 정보가 유출 될 수 있습니다.

2. imageCreatefromgd2 함수를 사용하여 이미지를로드하십시오

imageCreateFromGD2 함수는 PHP가 제공 한 함수로 GD2 형식의 이미지 파일에서 이미지 리소스를 생성합니다. 기본 사용법은 다음과 같습니다.

 $image = imagecreatefromgd2($filename);

이 함수는 파일 경로 매개 변수 $ filename을 사용하여 이미지 리소스를 반환합니다. 경로가 올바르지 않거나 파일에 액세스 할 수없는 경우 일반적으로 거짓이 반환됩니다.

3. 경로 횡단 공격의 위험

공격자는 다음과 같은 파일 경로를 수정하여 보안 제한을 우회 할 수 있습니다.

 $image = imagecreatefromgd2('/var/www/html/uploads/../../etc/passwd');

위의 예에서 공격자는 경로의 일부를 통해 서버의 /etc/passwd 파일에 액세스하여 민감한 정보를 누출하려고 시도합니다.

4. 경로 트래버스 공격을 방지하는 방법은 무엇입니까?

경로 트래버스 공격을 방지하기 위해서는 사용자가 입력 한 경로를 엄격하게 검증하고 필터링해야합니다. 다음은 몇 가지 효과적인 예방 조치입니다.

4.1 파일 경로를 확인하십시오

먼저 파일 경로가 신뢰할 수 있는지 확인하십시오. PHP의 RealPath () 함수를 사용하여 상대 경로를 절대 경로로 변환하고 예상 디렉토리에 있는지 확인할 수 있습니다. RealPath () 함수는 정규화 된 절대 경로를 반환하고 모든 상징적 링크를 구문 분석합니다.

 $filename = '/var/www/html/uploads/' . $_GET['filename']; // 사용자가 입력 한 파일 경로를 가져옵니다
$realpath = realpath($filename);

if ($realpath && strpos($realpath, '/var/www/html/uploads/') === 0) {
    // 경로는 유효합니다,허용 된 디렉토리 내에서
    $image = imagecreatefromgd2($realpath);
} else {
    // 잘못된 경로,로드를 거부하십시오
    echo "Invalid file path!";
}

위의 코드에서 먼저 realpath () 함수를 사용하여 파일의 절대 경로를 얻은 다음 /var/www/html/uploads/ directory에 있는지 확인합니다. 그렇지 않은 경우 파일로드를 거부합니다.

4.2 화이트리스트를 사용하여 파일 이름을 확인하십시오

업로드 및로드 할 수있는 파일 이름은 화이트리스트로 제한 될 수 있습니다. 이렇게하면 악의적 인 파일이 업로드 및로드되는 것을 방지 할 수 있습니다.

 $allowed_files = ['image1.gd2', 'image2.gd2']; // 화이트리스트
$filename = $_GET['filename'];

if (in_array($filename, $allowed_files)) {
    $image = imagecreatefromgd2('/var/www/html/uploads/' . $filename);
} else {
    echo "File not allowed!";
}

4.3 기호 링크 공격 방지

Symlinks는 경로 트래버스 공격을 수행하는 데 사용될 수 있습니다. 파일 경로가 물리적으로 존재하고 RealPath ()를 사용하여 기호 링크를 포함하지 않도록 할 수 있습니다. 이렇게하면 상징적 링크를 통해 액세스 할 수없는 파일에 대한 액세스가 발생하지 않습니다.

 $filename = '/var/www/html/uploads/' . $_GET['filename'];
$realpath = realpath($filename);

if ($realpath && strpos($realpath, '/var/www/html/uploads/') === 0 && !is_link($realpath)) {
    // 경로는 유효합니다,그리고 상징적 링크가 없습니다
    $image = imagecreatefromgd2($realpath);
} else {
    echo "Invalid file path or symbolic link detected!";
}

5. 요약

PHP의 imageCreateFromGD2 함수를 사용하여 GD2 이미지를로드 할 때 경로 트래버스 공격 방지가 중요합니다. 파일 경로를 확인, 화이트리스트 사용, 기호 링크 확인 등을 사용하여 파일 경로를 확인하여 이러한 공격의 위험을 효과적으로 줄일 수 있습니다. 항상 서버 보안을 보장하고 경로 트래버스 취약성으로 인해 민감한 데이터 유출 또는 서버 공격을 피하기 위해 항상 경고해야합니다.