>  기사  >  백엔드 개발  >  PHP 보안-원격 파일 위험

PHP 보안-원격 파일 위험

黄舟
黄舟원래의
2017-02-21 09:14:001072검색



원격 파일 위험

PHP에는 기본적으로 활성화되어 있는 허용_url_fopen이라는 구성 옵션이 있습니다. 이를 통해 다양한 유형의 리소스를 가리키고 이를 로컬 파일처럼 처리할 수 있습니다. 예를 들어,

<?php
 
  $contents =
file_get_contents(&#39;http://example.org/&#39;);
 
  ?>


URL을 읽어 페이지의 콘텐츠(HTML)를 얻을 수 있습니다.

5장에서 설명한 것처럼 오염된 데이터를 사용하여 include 및 require의 파일을 가리키는 경우 심각한 취약점이 발생할 수 있습니다. 실제로 저는 이 취약점이 공격자가 임의의 코드를 실행할 수 있게 해주기 때문에 PHP 애플리케이션에서 가장 위험한 취약점 중 하나라고 생각합니다.

약간 덜 심각하지만 표준 파일 시스템 기능에서 오염된 데이터를 사용하면 유사한 취약점이 발생할 수 있습니다.

 <?php
 
  $contents =
file_get_contents($_GET[&#39;filename&#39;]);
 
  ?>


이 예에서는 사용자가 file_get_contents( ) 동작을 수행하여 원격 리소스의 콘텐츠를 가져옵니다. 다음과 같은 요청을 고려해 보세요.

http://www.php.cn/… mple.org%2Fxss.html

이는 $content의 값이 오염되는 상황으로 이어진다. 이 값은 간접적으로 얻어지기 때문에 이 사실은 무시될 가능성이 높다. 이것이 바로 심층 방어 원칙이 파일 시스템을 원격 데이터 소스로 취급하고 $content 값을 입력으로 처리하여 필터링 메커니즘이 잠재적으로 상황을 바꿀 수 있는 이유입니다.

$content 값이 오염되었기 때문에 , 이는 크로스 사이트 스크립팅 취약점 및 SQL 주입 취약점을 포함한 다양한 보안 취약점으로 이어질 수 있습니다. 예를 들어 크로스 사이트 스크립팅 취약점의 예는 다음과 같습니다.

  <?php
 
  $contents =
file_get_contents($_GET[&#39;filename&#39;]);
 
  echo $contents;
 
  ?>


> 해결책은 오염된 데이터가 있는 파일 이름을 절대로 가리키지 않는 것입니다. 입력 필터링을 고집하고 데이터가 파일 이름을 가리키기 전에 필터링되었는지 확인하세요.

  <?php
 
  $clean = array();
 
  /* Filter Input ($_GET[&#39;filename&#39;]) */
 
  $contents =
file_get_contents($clean[&#39;filename&#39;]);
 
  ?>


$content의 데이터가 완전히 완벽하다는 보장은 없지만, 이는 읽고 있는 파일이 공격자가 지정한 파일이 아니라 읽으려고 했던 파일과 정확히 일치한다는 합리적인 보장을 제공합니다. 이 프로세스의 보안을 강화하려면 $content를 입력으로 처리하고 사용하기 전에 필터링해야 합니다.

아아앙


위의 프로세스는 다양한 공격을 방지할 수 있는 강력한 방법을 제공하므로 실제 프로그래밍에 사용하는 것이 좋습니다.

위 내용은 PHP 보안-원격 파일 위험에 대한 내용이며, 보다 자세한 내용은 PHP 중국어 홈페이지(www. php.cn)!

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