이 글에서는 PHP 파일 업로드의 로직 구현 분석에 대해 소개하겠습니다. 이런 구현은 프로젝트에서 비교적 흔한 것 같아요~ 도움이 필요한 친구들에게 도움이 되길 바랍니다~
파일 이름 처리
파일 이름은 비즈니스 요구 사항에 따라 다릅니다. 원래 이름을 유지할 필요가 없다면 이름을 무작위로 생성하고 화이트리스트에서 확인된 접미사를 추가하면 됩니다. [추천 학습: PHP 동영상 튜토리얼]
반대로 취급 시 주의 사항:
//允许上传的后缀白名单 $extension_white_list = ['jpg', 'pdf']; //原始文件的名字 $origin_file_name = 'xx/xxx/10月CPI同比上涨2.1%.php.pdf'; //提取文件后缀,并校验是否在白名单内 $extension = strtolower(pathinfo($origin_file_name, PATHINFO_EXTENSION)); if (!in_array($extension, $extension_white_list)) { die('错误的文件类型'); } //提取文件名 $new_file_name = pathinfo($origin_file_name, PATHINFO_BASENAME); //截取掉后缀部分 $new_file_name = mb_substr($new_file_name, 0, mb_strlen($new_file_name) - 1 - mb_strlen($extension)); //只保留有限长度的名字 $new_file_name = mb_substr($new_file_name, 0, 20); //替换掉所有的 . 避免攻击者构造多后缀的文件,缺点是文件名不能包含 . $new_file_name = str_replace('.', '_', $new_file_name); //把处理过的名字和后缀拼接起来构造成一个名字 $new_file_name = $new_file_name . '.' . $extension; print_r($new_file_name); //10月CPI同比上涨2_1%_php.pdf
파일 내용 처리
파일 접미사는 피상적일 뿐입니다. php 파일의 경우 접미사를 jpg로 변경합니다. PHP 코드를 전달한다는 사실은 바뀌지 않습니다.
이미지 파일의 경우 이미지 파일 헤더를 읽어 이미지 유형을 확인할 수 있습니다. 물론 이 방법은 테스트하지 않았습니다. 관심이 있으시면 직접 테스트해 보세요.
또한 위의 방법이 가능하더라도 우회할 수 있습니다. 특정 이미지 유형의 헤더 특성 바이트를 PHP 파일의 헤더에 작성하면 위장할 수 있습니다.
이미지 파일 콘텐츠 처리의 경우 실제 비결은 이미지를 다시 그리는 것입니다.
Windows 시스템에서 복사 명령을 사용하여 PHP 코드가 포함된 이미지 파일을 만듭니다. 명령은 다음과 같습니다.
Copy 1.jpg/b + test.php/a 2.jpg
위 명령은 test.php를 1.jpg의 끝에 병합하고 2로 다시 내보내는 것을 의미합니다. .jpg, 이렇게 하면 이 2.jpg는 PHP 코드가 포함된 이미지 파일입니다. 메모장으로 열고 스크롤 막대를 아래쪽으로 드래그하면 PHP 코드를 볼 수 있습니다.
이런 더러운 그림의 경우 그림을 다시 그려서 더러운 부분을 제거할 수 있습니다. 다음은 이미지를 다시 그리는 PHP 코드입니다.
try { $jpg = '包含php代码的.jpg'; list($width, $height) = getimagesize($jpg); $im = imagecreatetruecolor($width, $height); $image = imagecreatefromjpeg($jpg); imagecopyresampled($im, $image, 0, 0, 0, 0, $width, $height, $width, $height); $target = '重绘后干净的图片.jpg'; imagejpeg($image, $target); } finally { isset($im) && is_resource($im) && imagedestroy($im); isset($image) && is_resource($image) && imagedestroy($image); }
이 방법의 단점은 메모리를 소모하고, 이미지가 왜곡되며, 이미지 처리만 가능하다는 점입니다.
물론, 다시 그리기 방법을 사용하여 다른 파일 형식을 처리할 수 있는지는 모르겠습니다.
파일 권한 처리
Linux에서의 권한만 논의하세요. Linux에서의 권한에 대해 간단히 소개하겠습니다.
读取,字母 r 或数字 4 表示 写入,字母 w 或数字 2 表示 执行,字母 x 或数字 1 表示
파일의 경우 rwx는 다음과 같은 의미를 갖습니다.
r:可打开读取此文件 w:可写入此文件 x:可执行此文件
디렉토리의 경우 rwx의 의미는 약간 다릅니다. :
r:可读取此目录的内容列表 w:可在此目录里面进行:增、删、改文件和子目录 x:可进入此目录
또한 Linux에서 파일의 경우 사용자는 파일을 만든 사용자, 파일을 만든 사용자와 동일한 사용자 그룹에 속한 사용자, 그리고 세 가지 유형으로 구분됩니다. 생성자도 아니고 그룹의 다른 사용자도 아닙니다.
리눅스 권한을 이해하면 업로드된 파일이 있는 디렉터리에 대해 755 권한을 설정해야 합니다. 즉,
-
디렉토리를 생성한 사용자는 이 디렉터리를 읽고, 쓰고, 들어갈 수 있는 권한을 가집니다
-
디렉토리를 생성한 사용자와 동일한 사용자 그룹에 속한 사용자는 이 디렉토리를 읽고 들어갈 수 있는 권한을 가집니다.
-
생성자도, 같은 그룹이 아닌 다른 사용자도 이 디렉토리를 읽고 들어갈 수 있는 권한을 가집니다
권한을 755로 설정하면 nginx가 정적 파일을 프록시할 때 403 오류를 보고하는 것을 방지할 수 있습니다.
코드 예:
mkdir($save_path, 0755, true);
업로드된 파일에 대해 더 엄격한 권한 설정을 채택합니다. 644 권한이 설정되어야 합니다. 즉,
파일을 만든 사용자는 이 파일을 읽고 쓸 수 있는 권한이 있으며
- 실행할 수 없습니다.
파일을 생성한 사용자와 동일한 사용자 그룹의 사용자는 읽기 권한만 갖습니다.
작성자도 아니고 동일한 그룹도 아닌 다른 사용자는 읽기 권한만 가집니다.
644 불법파일을 업로드한 경우 해당 내용을 수정하거나 실행할 수 없습니다.
코드 예:
chmod($file, 0644);
파일 서버 처리
돈으로 OSS 스토리지 서비스를 구매하세요. 생각도 하지 말고 그냥 던져 보세요.
원본 주소: https://learnku.com/articles/73100
저자 블로그: https://learnku.com/blog/buexplain
위 내용은 PHP 파일 업로드 처리 로직 검토(종합 분석)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

Amazon Simple Storage Service,简称Amazon S3,是一种使用 Web 界面提供存储对象的存储服务。Amazon S3 存储对象可以存储不同类型和大小的数据,从应用程序到数据存档、备份、云存储、灾难恢复等等。该服务具有可扩展性,用户只需为存储空间付费。Amazon S3 有四个基于可用性、性能率和持久性的存储类别。这些类包括 Amazon S3 Standard、Amazon S3 Standard Infrequent Access、Amazon S3 One

怎么处理文件上传?下面本篇文章给大家介绍一下node项目中如何使用express来处理文件的上传,希望对大家有所帮助!

Vue作为目前前端开发最流行的框架之一,其实现文件上传功能的方式也十分简单优雅。本文将为大家介绍在Vue中如何实现文件上传功能。HTML部分在HTML文件中添加如下代码,创建上传表单:<template><div><formref="uploadForm"enc

CakePHP是一个开源的Web应用程序框架,它基于PHP语言构建,可以简化Web应用程序的开发过程。在CakePHP中,处理文件上传是一个常见的需求,无论是上传头像、图片还是文档,都需要在程序中实现相应的功能。本文将介绍CakePHP中如何处理文件上传的方法和一些注意事项。在Controller中处理上传文件在CakePHP中,上传文件的处理通常在Cont

在实际开发项目过程中有时候需要上传比较大的文件,然后呢,上传的时候相对来说就会慢一些,so,后台可能会要求前端进行文件切片上传,很简单哈,就是把比如说1个G的文件流切割成若干个小的文件流,然后分别请求接口传递这个小的文件流。

在Web应用程序的开发中,文件上传功能已经成为了基本的需求。这个功能允许用户向服务器上传自己的文件,然后在服务器上进行存储或处理。然而,这个功能也使得开发者更需要注意一个安全漏洞:文件上传漏洞。攻击者可以通过上传恶意文件来攻击服务器,从而导致服务器遭受不同程度的破坏。PHP语言作为广泛应用于Web开发中的语言之一,文件上传漏洞也是常见的安全问题之一。本文将介

近年来,Web应用程序逐渐流行,而其中许多应用程序都需要文件上传功能。在Django框架中,实现上传文件功能并不困难,但是在实际开发中,我们还需要处理上传的文件,其他操作包括更改文件名、限制文件大小等问题。本文将分享一些Django框架中的文件上传技巧。一、配置文件上传项在Django项目中,要配置文件上传需要在settings.py文件中进

Swoole是一款基于PHP的高性能异步面向网络编程的框架,能够实现异步IO、多进程多线程、协程等特性,能够大幅提高PHP在网络编程方面的性能表现。在很多实时且高并发的应用场景下,Swoole已经成为了开发者的首选。本文将介绍如何使用Swoole实现高并发大文件上传的方案。一、传统方案的问题在传统的文件上传方案中,通常使用的是HTTP的POST请求方式,即将


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

드림위버 CS6
시각적 웹 개발 도구

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.
