POST 파일에서 PHP 확장자를 사용한 위장 검사
5526 단어 PHP
고객측 POST의 파일에 대해서는 Direct Littlar Bar 대책 등 이외에도 주의해야 할 부분이 있는데, 이번에는'클라이언트 형식 POST의 파일 검증'에서'파일 확장자의 위장 검사'에 초점을 맞췄습니다!
그렇다면 확장자의 위장은 무엇일까.
mv sample.png sample.jpg
위에서 말한 바와 같이 내부 이진 변환 처리를 하지 않은 상태에서 확장자를 수정합니다.단, 위의 파일을 Hex로 확인한 후
2진 헤더에 pg 파일을 확인할 수 있는 마술 번호가 있습니다!
확장자로 위장된 파일을 서버에서 확인
먼저 다음 필드의 POST 파일을 사전 요구 사항으로 처리합니다.
<input type="file" name="up-file">
그때 POST가 했어sample.png を sample.jpg にリネームしたファイル
.그리고 나서
echo $_FILES["up-file"]["type"];
그럼 MIME-Type으로image/jpeg
확인할 수 있을 거예요.이것은 MIME-Type 일람 페이지에서 확인할 수 있는 것처럼
jpgファイル
로 식별된 증거이다.그렇지만
$f_info = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file(
$f_info,
$_FILES["up-file"]['tmp_name']
);
finfo_close($f_info); //念の為メモリ空間に開いたストリームの破棄を行う
echo $mime;
POST 파일의 바이너리에서 MIME-Type을 가져올 때
image/png
이렇게 하면 원래pngファイル
였음을 확인할 수 있다.총결산
$_FILES["識別子"]["type"]
확인 가능한 MIME-Type은 파일 이름의 확장자로 추정됩니다!그래서
다음은 샘플 코드입니다!
$file = $_FILES["識別子"];
$file_mime_type = $file["type"];
$f_info = finfo_open(FILEINFO_MIME_TYPE);
$binary_mime_type = finfo_file(
$f_info,
$file['tmp_name']
);
finfo_close($f_info);
$is_same_mime_type = $file_mime_type === $binary_mime_type;
감사합니다!!!!추기
PHP에서 POST 파일의 Hex를 확인하는 방법입니다.
$binary = file_get_contents(
$_FILES["識別子"]["tmp_name"]
);
echo bin2hex($binary);
Bin2hex(정확히 Binary to Hex)로 Binary 데이터를 Hex로 변환!위 코드의
$_FILES["識別子"]["tmp_name"]
에서 POST 파일의 임시(temporary) 경로를 문자열(String형)으로 저장하기 때문에 이진 데이터 처리로 file_get_contents
합니다.그리고
Reference
이 문제에 관하여(POST 파일에서 PHP 확장자를 사용한 위장 검사), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/huuya/items/ea19c0d4179074b94cf8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)