PHP safe_mode 옵션의 목적은 이 장에서 설명하는 일부 문제를 해결하는 것입니다. 그러나 PHP 매뉴얼(http://www.php.cn/)에 명시된 대로 이러한 유형의 문제를 PHP 수준에서 해결하는 것은 구조적으로 올바르지 않습니다.
안전 모드가 활성화되면 PHP는 실행 중인 스크립트가 읽은(또는 조작하는) 파일의 소유자가 스크립트의 소유자와 동일한지 확인합니다. 이는 이 장의 많은 예제로부터 보호되지만 다른 언어로 작성된 프로그램에는 영향을 미치지 않습니다. 예를 들어 Bash로 작성된 CGI 스크립트를 사용합니다.
#!/bin/bash echo "Content-Type: text/plain" echo "" cat /home/victim/inc/db.inc
Bash 파서는 안전 모드를 켜기 위해 PHP 구성 파일의 구성 문자열을 고려하거나 확인합니까? 물론 그렇지 않습니다. 마찬가지로 Perl, Python 등 서버에서 지원하는 다른 언어도 이에 대해 신경 쓰지 않습니다. 이 장의 모든 예제는 다른 프로그래밍 언어에 쉽게 적용할 수 있습니다.
또 다른 일반적인 문제는 안전 모드가 웹 서버에 속한 파일에 대한 액세스를 거부하지 않는다는 것입니다. 이는 스크립트를 사용하여 다른 스크립트를 생성할 수 있고 새 스크립트가 웹 서버에 속하므로 웹 서버에 속한 모든 파일에 액세스할 수 있기 때문입니다.
<?php $filename = 'file.php'; $script = '<?php header(\'Content-Type: text/plain\'); readfile($_GET[\'file\']); ?>'; file_put_contents($filename, $script); ?>
위 스크립트는 다음 파일을 생성합니다.
아아아앙
파일이 웹 서버에 의해 생성되었으므로 해당 파일의 소유자는 웹 서버입니다(Apache는 일반적으로 사용자 none으로 실행됩니다):
<?php header('Content-Type: text/plain'); readfile($_GET['file']); ?>
따라서 이 스크립트는 안전 모드에서 제공되는 많은 보안 조치를 우회할 수 있습니다. 안전 모드가 켜져 있더라도 공격자는 /tmp 디렉터리에 저장된 세션 정보와 같은 일부 정보를 계속 표시할 수 있습니다. 이러한 파일은 웹 서버(아무도 없음)에 속하기 때문입니다.
PHP의 안전 모드는 어떤 역할을 하며 심층 방어 메커니즘으로 간주될 수 있습니다. 그러나 이는 보호 기능이 열악할 뿐이며 이 장에는 이를 대체할 다른 보안 조치가 없습니다.
위 내용은 PHP 보안 안전 모드 내용이며, 보다 자세한 내용은 PHP 중국어 홈페이지(www.php)를 참고하시기 바랍니다. .cn)!