>백엔드 개발 >PHP 튜토리얼 >PHP 보안 안전 모드

PHP 보안 안전 모드

黄舟
黄舟원래의
2017-02-20 09:23:351243검색



안전 모드

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 = &#39;file.php&#39;;
  $script = &#39;<?php
 
  header(\&#39;Content-Type: text/plain\&#39;);
  readfile($_GET[\&#39;file\&#39;]);
 
  ?>&#39;;
 
  file_put_contents($filename, $script);
 
  ?>


위 스크립트는 다음 파일을 생성합니다.

아아아앙


파일이 웹 서버에 의해 생성되었으므로 해당 파일의 소유자는 웹 서버입니다(Apache는 일반적으로 사용자 none으로 실행됩니다):

 <?php
 
  header(&#39;Content-Type: text/plain&#39;);
  readfile($_GET[&#39;file&#39;]);
 
  ?>


따라서 이 스크립트는 안전 모드에서 제공되는 많은 보안 조치를 우회할 수 있습니다. 안전 모드가 켜져 있더라도 공격자는 /tmp 디렉터리에 저장된 세션 정보와 같은 일부 정보를 계속 표시할 수 있습니다. 이러한 파일은 웹 서버(아무도 없음)에 속하기 때문입니다.

PHP의 안전 모드는 어떤 역할을 하며 심층 방어 메커니즘으로 간주될 수 있습니다. 그러나 이는 보호 기능이 열악할 뿐이며 이 장에는 이를 대체할 다른 보안 조치가 없습니다.

위 내용은 PHP 보안 안전 모드 내용이며, 보다 자세한 내용은 PHP 중국어 홈페이지(www.php)를 참고하시기 바랍니다. .cn)!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.