>  기사  >  백엔드 개발  >  PHP의 file_put_contents 함수에 대한 자세한 설명

PHP의 file_put_contents 함수에 대한 자세한 설명

小云云
小云云원래의
2018-01-02 11:41:595242검색

이 기사에서는 주로 PHP의 file_put_contents 함수에 대한 자세한 설명을 공유합니다. 저는 최근 EIS에서 파일 업로드 질문을 접했고 < 필터링 후에 많은 제스처가 유효하지 않다는 것을 알게 되었습니다. 나는 이 질문을 해결하지 못했습니다. 그제서야 나는 그것을 우회하기 위해 배열을 사용하고 있다는 것을 깨달았습니다. 여기서는 더 이상 고민하지 않고 자세한 소개를 살펴보겠습니다.

file_put_contents 함수의 두 번째 매개변수 데이터에 대한 공식 웹사이트 정의를 살펴보겠습니다.

data
要写入的数据。类型可以是 string,array 或者是 stream 资源(如上面所说的那样)。
 
如果 data 指定为 stream 资源,这里 stream 中所保存的缓存数据将被写入到指定文件中,这种用法就相似于使用 stream_copy_to_stream() 函数。
 
参数 data 可以是数组(但不能为多维数组),这就相当于 file_put_contents($filename, join(&#39;&#39;, $array))。

보시다시피, 데이터 매개변수는 배열이 될 수 있으며, 이는 Join('',$array)

에 의해 자동으로 문자열로 변환됩니다. 이 함수가 파일에 액세스할 때 다음 규칙을 따릅니다.

  • FILE_USE_INCLUDE_PATH가 설정되면 *filename* 복사본의 내장 경로가 확인됩니다


  • 파일이 없으면 파일이 생성됩니다


  • 파일 열기


  • LOCK_EX를 설정하면 파일이 잠깁니다


  • FILE_APPEND가 설정된 경우 파일의 끝으로 이동합니다. 그렇지 않으면 파일 내용이 삭제됩니다


  • 파일에 데이터 쓰기


  • 파일을 닫고 모든 파일 잠금 해제


  • 성공하면 함수는 파일에 쓰여진 문자 수를 반환합니다. 실패하면 False가 반환됩니다.

그러나 문자열 필터링 기능은 일반적으로 다음과 같이 preg_match 기능을 사용하여 필터링합니다. 문자열을 처리하는 많은 함수(예: strcmp, strlen, md5 등)가 배열이 전달되면 NULL을 반환한다는 것을 알고 있습니다. 그러나 오류가 발생하면 preg_match 함수는 false를 반환합니다. 여기서는 var_dump(preg_match('/<)를 전달할 수 있습니다. ;/',$data )); 이 경우 preg_match의 일반 필터링이 유효하지 않음을 확인합니다

그래서 파일업로드 코드는 이렇게 쓴거 같네요

if(preg_match(&#39;/\</&#39;,$data)){
 die(&#39;hack&#39;);
}

그래서 우리는

를 우회하기 위해 content[]=&ext=php를 전달할 수 있습니다. 해결 방법


해결 방법은 fwrite 함수를 사용하여 위험한 file_put_contents 함수를 대체하는 것입니다. fwrite 함수는 문자열만 전달할 수 있습니다. 배열인 경우 오류가 반환됩니다.

<?php 
 
if(isset($_POST[&#39;content&#39;]) && isset($_POST[&#39;ext&#39;])){
 $data = $_POST[&#39;content&#39;];
 $ext = $_POST[&#39;ext&#39;];
 
 //var_dump(preg_match(&#39;/\</&#39;,$data));
 if(preg_match(&#39;/\</&#39;,$data)){
  die(&#39;hack&#39;);
 }
 $filename = time();
 file_put_contents($filename.$ext, $data);
}
 
?>

관련 권장 사항:


10 PHP file_put_contents() 함수에 관한 기사

php에서 file_put_contents 추가 및 줄 바꿈을 구현하는 방법은 무엇입니까?

PHP에서 fwrite와 file_put_contents의 차이점

위 내용은 PHP의 file_put_contents 함수에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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