PHP의 디렉터리 탐색 취약점 완화: 안전한 경로 보존
민감한 디렉터리에 대한 무단 액세스를 방지하는 것은 PHP 개발에서 매우 중요합니다. 디렉터리 탐색 취약점은 공격자가 부적절한 입력 유효성 검사를 악용하여 지정된 디렉터리 외부를 탐색할 수 있도록 하는 심각한 위협을 야기합니다.
언급된 시나리오에서 기본 경로 "/whatever/foo/"가 있고 경로를 허용해야 합니다. 이에 비해 "..." 또는 "./.."와 같은 절대 경로는 순회 공격을 방지하는 능력이 부족하여 필터로 사용할 수 없습니다.
해결 방법 이에 대한 효과적인 해결책은 실제 경로를 비교하는 것입니다. 작동 방식은 다음과 같습니다.
$basepath = '/foo/bar/baz/'; $realBase = realpath($basepath); $userpath = $basepath . $_GET['path']; $realUserPath = realpath($userpath); if ($realUserPath === false || strpos($realUserPath, $realBase) !== 0) { // Directory Traversal Detected } else { // Valid Path }
realpath() 함수는 제공된 경로를 해당 실제 경로로 확인하여 심볼릭 링크, "점" 탐색 및 기타 경로 조작 트릭을 제거합니다. 사용자 경로의 실제 경로와 기본 경로의 실제 경로를 비교하여 순회가 시도되었는지 확인할 수 있습니다. 실제 사용자 경로가 실제 기본 경로로 시작하지 않으면 순회가 발생할 가능성이 높습니다.
realpath()의 출력에서 "."와 같은 가상 디렉터리는 제외됩니다. 또는 "...". 따라서 실제 경로를 비교하면 공격자가 이러한 문자를 사용하여 순회 취약점을 악용하는 것을 효과적으로 방지할 수 있습니다.
위 내용은 PHP 개발자는 어떻게 디렉터리 탐색 취약점을 효과적으로 방지할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!