>  기사  >  백엔드 개발  >  PHP 취약점에 대한 완전한 솔루션(9) - 파일 업로드 취약점

PHP 취약점에 대한 완전한 솔루션(9) - 파일 업로드 취약점

黄舟
黄舟원래의
2016-12-22 09:47:541770검색

재인쇄할 소스를 표시하십시오: PHP 취약점 전체 솔루션(9) - 파일 업로드 취약점

일련의 웹 애플리케이션은 일반적으로 방문자가 일부 파일을 쉽게 업로드할 수 있도록 파일 업로드 기능을 제공합니다.

다음은 간단한 파일 업로드 양식입니다



form>


php 구성 파일 php.ini, upload_max_filesize 옵션은 업로드할 수 있는 파일 크기를 지정하며 기본값은 2M입니다

$_FILES 배열 변수

PHP는 $_FILES 변수를 사용하여 파일을 업로드합니다. test.txt를 업로드하는 경우 $_FILES 배열의 내용은 다음과 같습니다.




$FILES
Array
{
[file] => 배열
{
[이름] => test.txt //파일 이름
[유형] => text/plain //MIME 유형
[tmp_name] => .tmp //임시 파일
[error] => 0 //오류 메시지
[size] => 536 //파일 크기(바이트)
}
}
파일 버튼의 이름 속성 값은 file


그런 다음 $_FILES['file' ]['name '] 경로를 제외하고 클라이언트가 업로드한 파일 이름을 가져옵니다. $_FILES['file']['tmp_name']을 사용하여 서버가 업로드된 파일을 저장하는 임시 파일 경로를 얻습니다

업로드된 파일이 저장된 폴더

PHP는 직접 업로드된 파일은 웹사이트의 루트 디렉터리에 저장되지만, 이름은 $_FILES['file']['tmp_name'] 값으로 임시 파일로 저장됩니다. 개발자는 이 임시 파일을 저장된 웹사이트 폴더에 복사해야 합니다. .

$_FILES['file']['tmp_name'] 값은 PHP에 의해 설정되며 파일의 원래 이름과 다릅니다. 개발자는 $_FILES['file']['name'을 사용해야 합니다. ] 업로드된 파일의 원본 이름을 가져옵니다.

파일 업로드 시 오류 정보

$_FILES['file']['error'] 변수는 파일 업로드 시 오류 정보를 저장하는 데 사용됩니다.

错误信息 数值 说 明
UPLOAD_ERR_OK 0 没有错误
UPLOAD_ERR_INI_SIZE 1 上传文件的大小超过php.ini的设置
UPLOAD_ERR_FROM_SIZE 2 上传文件的大小超过HTML表单中MAX_FILE_SIZE的值
UPLOAD_ERR_PARTIAL 3 只上传部分的文件
UPLOAD_ERR_NO_FILE 4 没有文件上传

파일 업로드 취약점

웹사이트 방문자에게 이미지 업로드 기능을 제공하는 경우 방문자가 업로드하는 것이 실제로 이미지가 아닌 PHP 프로그램일 수 있으므로 주의해야 합니다. 지정할 수 있는 것입니다. 이미지가 저장된 디렉토리가 오픈 폴더인 경우, 침입자는 업로드된 PHP 파일을 원격으로 실행하여 공격을 수행할 수 있습니다.

다음은 간단한 파일 업로드 예시입니다.




php
// 파일 업로드 디렉터리 설정
$uploaddir = "D : /www/images/";
// 파일이 있는지 확인
if (isset($_FILES['file1']))
{
// 배치할 전체 경로 파일 이름을 포함한 웹 사이트 디렉토리
$uploadfile = $uploaddir . $_FILES['file1']['name']
// 서버에 저장된 경로를 실제 파일 이름으로 이동
move_uploaded_file($_FILES[ 'file1']['tmp_name'], $uploadfile);
}
?>
……




양식>


이 예제에는 체크 파일 접미사가 없으며 어떤 파일이든 업로드할 수 있으며 명백한 업로드 취약점이 있습니다

위는 PHP 취약점(9)에 대한 전체 설명입니다. - 파일 업로드 취약점에 대한 내용입니다. 더 많은 관련 내용을 보려면 PHP 중국어 웹사이트(www.php.cn)를 주목하세요!


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