PHP 개발 중에 Highlower_File 함수는 매우 편리한 도구입니다. 지정된 PHP 파일을 하이라이트 형식으로 출력하여 개발자가 코드 구조 및 구문을 빠르게 볼 수 있도록합니다. 그러나 Highlower_File을 사용하여 파일 내용을 직접 표시 할 때 파일 경로의 보안 확인이 제대로 수행되지 않으면 경로 트래버스 공격 또는 민감한 파일 내용을 노출시키는 것과 같은 보안 위험이 발생할 수 있습니다.
이 기사는 실제 코드 예제를 결합하여 Highlower_File 기능을 안전하고 효율적으로 사용하여 PHP 파일의 하이라이트를 보장하는 방법을 소개합니다.
Highter_File은 지정된 PHP 파일을 읽고 구문 강조 표시로 HTML 형식으로 출력하는 내장 PHP 기능입니다. 통화 형식은 다음과 같습니다.
highlight_file('파일 경로');
예:
highlight_file('example.php');
이 기능은 기본적으로 강조 표시된 코드를 직접 출력합니다. 문자열 형태로 강조 표시된 코드를 가져 오려면 두 번째 매개 변수를 true 할 수 있습니다.
사용자가 입력 한 경로가 Highlight_File 로 직접 전달되면 사용자 입력과 같은 경로 트래버스 공격을 쉽게 유발할 수 있습니다.
../../../../etc/passwd
또는 서버의 민감한 파일에 액세스하여 보지 말아야 할 데이터 누출 위험이 발생합니다. 따라서 Highlod_File을 호출하기 전에 파일 경로를 엄격하게 필터링하고 확인해야합니다.
아래는 파일 경로에서 엄격한 검사를 통해 Highlod_File을 안전하게 호출하는 방법을 보여주는 샘플 코드입니다.
<?php
// 표시 될 수있는 파일 디렉토리의 루트 경로 정의
define('BASE_DIR', __DIR__ . '/php_files/');
// 사용자가 요청한 파일 이름을 가져옵니다
$file = $_GET['file'] ?? '';
// 기본 안전 검사,빈 파일 이름을 피하거나 불법 문자를 포함하지 마십시오
if (empty($file) || preg_match('/[^a-zA-Z0-9_\-\.]/', $file)) {
die('잘못된 파일 이름');
}
// 스 플라이 싱 파일의 절대 경로
$filePath = realpath(BASE_DIR . $file);
// 경로가 허용 된 디렉토리에 있는지 여부를 추가로 확인하십시오.,경로가 횡단되는 것을 방지하십시오
if ($filePath === false || strpos($filePath, realpath(BASE_DIR)) !== 0) {
die('非法파일 경로');
}
// 파일이 존재하고 일반 파일인지 확인
if (!is_file($filePath)) {
die('파일이 존재하지 않습니다');
}
// 부르다highlight_file출력 하이라이트 코드
highlight_file($filePath);
?>
한정된 디렉토리 : 사용자가 시스템 파일에 액세스하는 것을 피하기 위해 Base_dir를 통해 파일을 표시 할 수있는 루트 디렉토리를 정의합니다.
문자 검증 : 파일 이름을 제한하여 문자, 숫자, 밑줄, 짧은 수평선 및 지점 만 포함하도록 제한하고 특수 문자를 제외합니다.
RealPath 기능 : 경로 이동 공격을 방지하기위한 경로를 구문 분석하고 정상화합니다.
경로 접두사 일치 : 우회 제한을 방지하기 위해 파일의 실제 경로가 허용 된 디렉토리와 접두어를 접두사 해야하는지 확인하십시오.
파일 존재 확인 : 지정된 파일이 존재하고 일반 파일인지 확인하십시오.
프로젝트의 PHP_Files 디렉토리에 볼 수있는 PHP 파일을 배치하고 액세스 할 때 URL을 사용한다고 가정하십시오.
http://gitbox.net/show_code.php?file=test.php
요청은 php_files/test.php 파일의 내용을 안전하게 읽고 강조합니다.
엄격한 파일 경로 점검과 함께 Highlower_File 함수를 사용하면 코드 브라우징 기능의 보안 및 안정성을 크게 향상시키고 경로 교차 및 민감한 파일 누출 위험을 피할 수 있습니다. 모범 사례의 핵심은 다음과 같습니다.
제한된 접근성 루트 디렉토리;
파일 이름이 합법성을 준수하는지 확인하십시오.
realpath를 경로 사양으로 사용하십시오.
파일 경로가 지정된 디렉토리에 있어야하는지 확인하십시오.
파일이 존재하고 일반 파일인지 확인하십시오.
이러한 완전한 검사 프로세스는 유연한 코드보기를 보장 할뿐만 아니라 서버 보안을 보장합니다.