현재 위치: > 최신 기사 목록> PHP에서 set_include_path 함수를 사용하여 발생하는 가능한 보안 위험을 방지하는 방법은 무엇입니까?

PHP에서 set_include_path 함수를 사용하여 발생하는 가능한 보안 위험을 방지하는 방법은 무엇입니까?

gitbox 2025-06-15

set_include_path는 파일의 경로를 설정하는 PHP의 함수입니다. PHP가 파일을 찾을 때 지정된 경로 목록에서 찾을 수 있도록 include_path 구성 항목을 수정할 수 있습니다. 그러나 실제 개발 에서이 기능을 부적절하게 사용하면 일련의 보안 위험이 발생할 수 있습니다. 이 기사는 이러한 위험과 합리적인 전략을 통해이를 방지하는 방법을 탐구합니다.

1. set_include_path 의 기본 사용

php에서 set_include_path 함수는 파일의 검색 경로를 설정하는 데 사용됩니다. 이 기능을 사용하면 개발자가 기본 파일에 사용자 정의 경로를 추가 할 수있게 해주므로 경로가 포함되어있어 대규모 프로젝트 또는 프레임 워크의 여러 모듈 간의 파일 참조에 유용합니다.

예:

 <span><span><span class="hljs-title function_ invoke__">set_include_path</span></span><span>(</span><span><span class="hljs-string">'/var/www/myproject/includes'</span></span><span>);
</span></span>

이 코드 라인은 PHP 검색 파일의 경로에 /var/www/myproject/포함 디렉토리를 추가합니다. 이 경로를 통해 PHP는 해당 디렉토리에있는 파일을로드 할 수 있습니다.

 <span><span><span class="hljs-keyword">include</span></span><span> </span><span><span class="hljs-string">'myfile.php'</span></span><span>;
</span></span>

2. 보안 위험

set_include_path는 개발에 큰 편의를 제공하지만, 특히 외부 공격자에게주의를 기울이지 않으면 심각한 보안 취약점을 가져올 수 있습니다.

2.1 경로 납치 공격

가장 일반적인 위험 중 하나는 경로 납치입니다. 개발자가 안전하지 않은 경로를 사용하거나 사용자가 Set_Include_Path 에 직접 입력 한 통과 할 내용을 사용하면 공격자는이 기능을 사용하여 악성 파일을로드 할 수 있습니다. include_path 에 악의적 인 경로를 추가함으로써 공격자는 어떤 파일 PHP로드를 제어하여 응용 프로그램이 무단 코드를 실행할 수 있으며, 민감한 정보를 누출하거나 시스템을 손상시킬 수도 있습니다.

예:

코드가 다음과 같이 존재하는 경우 :

 <span><span><span class="hljs-variable">$path</span></span><span> = </span><span><span class="hljs-variable">$_GET</span></span><span>[</span><span><span class="hljs-string">'path'</span></span><span>];  </span><span><span class="hljs-comment">// 사용자가 입력 한 경로</span></span><span>
</span><span><span class="hljs-title function_ invoke__">set_include_path</span></span><span>(</span><span><span class="hljs-variable">$path</span></span><span>);
</span></span>

공격자는 유사한 exames.com/script.php?path=/tmp/malicious_code 에 액세스하여 include_path 에 악성 파일 경로를 추가하여 악성 코드를 실행할 수 있습니다.

2.2 로컬 파일에는 취약점 (LFI)이 포함됩니다.

PHP가 set_include_path를 사용하여 안전하지 않은 경로를 설정하는 경우 공격자는 PHP가 로컬 파일 또는 시스템 파일을로드하여 경로 매개 변수를 조작하여 로컬 파일 포함 취약점 (LFI)을 트리거 할 수 있습니다. 이로 인해 민감한 정보 유출 또는 원격 코드 실행이 발생할 수 있습니다.

2.3 불필요한 디렉토리 권한 노출

include_path를 수정함으로써 공격자는 파일의 로딩 경로를 간접적으로 제어 할 수 있습니다. 디렉토리 권한이 제대로 제어되지 않으면 다른 관련 파일이 공격자에게 노출 될 수 있습니다. 예를 들어, 일부 디렉토리에는 공격자가 액세스 할 경우 심각한 보안 문제를 일으킬 수있는 민감한 구성 파일 또는 로그 파일이 포함될 수 있습니다.

3. 방지 방법

3.1 사용자 입력을 확인하고 필터합니다

가장 중요한 예방 조치 중 하나는 사용자 입력을 직접 신뢰하지 않는 것입니다. 경로를 통과하는 모든 데이터는 경로의 보안을 보장하기 위해 엄격하게 검증되고 필터링되어야합니다. 베이스 이름 함수 및 기타 방법을 사용하여 잠재적 인 악성 경로 요소를 지울 수 있습니다.

예:

 <span><span><span class="hljs-variable">$path</span></span><span> = </span><span><span class="hljs-title function_ invoke__">basename</span></span><span>(</span><span><span class="hljs-variable">$_GET</span></span><span>[</span><span><span class="hljs-string">'path'</span></span><span>]);  </span><span><span class="hljs-comment">// 파일 이름 부분 만 가져옵니다</span></span><span>
</span></span>

이 방법은 사용자가 PATH TRAVERSAL을 통해 다른 디렉토리에서 파일을 얻을 수 없도록합니다.

3.2 include_path를 마음대로 수정하지 마십시오

실제로 필요한 경우가 아니라면 set_include_path 함수를 자주 사용하지 마십시오. 절대 또는 상대 경로를 통해 파일을 직접 포함시킬 수있는 경우 include_path를 수정할 필요가 없습니다. 절대적으로 필요한 경우에만 구성 항목이 수정되고 경로 세트가 엄격하게 제어되는지 확인하십시오.

3.3 고정 디렉토리 및 상수 사용

개발 중에 고정 된 디렉토리 구조를 사용하고 함수 호출의 경로를 하드 코딩하는 대신 상수를 통한 경로를 정의하는 것이 좋습니다. 이러한 방식으로 파일에 포함 된 경로를 더 잘 제어하고 잠재적 인 경로 납치 문제를 피할 수 있습니다.

예:

 <span><span><span class="hljs-title function_ invoke__">define</span></span><span>(</span><span><span class="hljs-string">'INCLUDE_PATH'</span></span><span>, </span><span><span class="hljs-string">'/var/www/myproject/includes'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">set_include_path</span></span><span>(INCLUDE_PATH);
</span></span>

이 방법은 경로의 균일 성과 보안을 보장하고 경로 오류의 가능성을 줄일 수 있습니다.

3.4 PHP의 allow_url_include 설정을 비활성화합니다

URL을 통해 외부 파일을로드하지 않으려면 php.ini 구성의 allow_url_include가 꺼져 있는지 확인하십시오. 이 구성 항목이 활성화되면 공격자는 URL을 통해 외부 악성 스크립트 파일을로드 할 수 있습니다.

3.5 감사 및 로그 모니터링

특히 민감한 파일 또는 구성 파일에 액세스 할 때 서버에서 파일 액세스 로그를 적시에 감사하고 모니터링합니다. 로그 분석을 통해 비정상적인 파일 액세스 동작을 찾아서 적시에이를 방지하고 수리 할 수 ​​있습니다.

4. 요약

set_include_path 는 PHP의 강력한 도구이지만 부적절하게 사용하면 보안 취약점의 원천이 될 수 있습니다. 잠재적 인 보안 위험을 줄이려면 개발자는 최상의 보안 관행을 따르고 모든 사용자 입력을 확인하고 필터링하고 파일 시스템에 대한 액세스를 제한하며 가능한 경우 포함 _Path를 수정하지 않아야합니다. 동시에 로그 모니터링 및 감사를 강화하면 잠재적 인 공격을 효과적으로 방지 할 수 있습니다.

이 방법을 사용하면 PHP 응용 프로그램의 보안을 보장하면서 유연한 파일로드 메커니즘을 즐길 수 있습니다.