PHP의 imageCreateFromGD2 함수를 사용하여 GD2 이미지를로드 할 때 입력 경로가 올바르게 처리되지 않으면 경로 트래버스 공격이 발생할 수 있습니다. 공격자는 특정 경로를 구성하여 서버의 민감한 파일에 액세스 할 수 있습니다. 따라서 경로 트래버스 공격을 올바르게 방지하는 것이 매우 중요합니다. 이 기사는 이러한 공격을 효과적으로 예방하는 방법을 설명합니다.
Path Traversal Attack은 공격자가 포함 된 경로를 구성하여 파일 시스템의 보안 제어를 우회하고 유사한 메소드와 노출되어서는 안되는 파일에 액세스하려고합니다. PHP에서 imageCreateFromGD2 함수가 올바른 검증 경로없이 이미지를로드하면 서버로드에 민감한 정보가 유출 될 수 있습니다.
imageCreateFromGD2 함수는 PHP가 제공 한 함수로 GD2 형식의 이미지 파일에서 이미지 리소스를 생성합니다. 기본 사용법은 다음과 같습니다.
$image = imagecreatefromgd2($filename);
이 함수는 파일 경로 매개 변수 $ filename을 사용하여 이미지 리소스를 반환합니다. 경로가 올바르지 않거나 파일에 액세스 할 수없는 경우 일반적으로 거짓이 반환됩니다.
공격자는 다음과 같은 파일 경로를 수정하여 보안 제한을 우회 할 수 있습니다.
$image = imagecreatefromgd2('/var/www/html/uploads/../../etc/passwd');
위의 예에서 공격자는 경로의 일부를 통해 서버의 /etc/passwd 파일에 액세스하여 민감한 정보를 누출하려고 시도합니다.
경로 트래버스 공격을 방지하기 위해서는 사용자가 입력 한 경로를 엄격하게 검증하고 필터링해야합니다. 다음은 몇 가지 효과적인 예방 조치입니다.
먼저 파일 경로가 신뢰할 수 있는지 확인하십시오. 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에 있는지 확인합니다. 그렇지 않은 경우 파일로드를 거부합니다.
업로드 및로드 할 수있는 파일 이름은 화이트리스트로 제한 될 수 있습니다. 이렇게하면 악의적 인 파일이 업로드 및로드되는 것을 방지 할 수 있습니다.
$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!";
}
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!";
}
PHP의 imageCreateFromGD2 함수를 사용하여 GD2 이미지를로드 할 때 경로 트래버스 공격 방지가 중요합니다. 파일 경로를 확인, 화이트리스트 사용, 기호 링크 확인 등을 사용하여 파일 경로를 확인하여 이러한 공격의 위험을 효과적으로 줄일 수 있습니다. 항상 서버 보안을 보장하고 경로 트래버스 취약성으로 인해 민감한 데이터 유출 또는 서버 공격을 피하기 위해 항상 경고해야합니다.