Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- group_concat 구분자
- mysqldump: Got error: 1045
- bootstrap
- PHP 구글 OTP 인증
- mysql root 비밀번호 변경
- 자바스크립트비밀번호검증
- PHP 구글 OTP 연동
- modsecurity 설치
- libxrender1
- 아파치 웹 서버의 정보 숨기기
- usb efi 시스템 파티션 삭제
- svn 충돌 해결 resolve
- JQuery checkbox 컨트롤
- 비밀번호검증정규식
- (using password: YES)" when trying to connect
- php 특정 문자열 취환
- magic bytes
- 비밀번호정규식
- wkhtmltopdf 실행 오류
- bootstrap modal
- javascript
- 우분투 mysql 비밀번호 없이 로그인 될때
- 구글 OTP 인증
- svn 충돌 해결 resolved
- PHP 정규식 예제
- 세로 중앙 정렬
- 파라미터 & 오류
- 부트스트랩4 세로 중앙 정렬
- apache mod rewrite
- html pdf 변환
Archives
- Today
- Total
투덜이 개발자
PHP File Upload: Check uploaded files with magic bytes 본문
반응형
PHP File Upload: Check uploaded files with magic bytes
File Extension And Mime/Media Type
$imgWhiteList = array("jpg" => "image/jpeg",
"jpeg" => "image/jpeg",
"gif" => "image/gif",
"bmp" => "image/bmp",
"png" => "image/png",
"webp" => "image/webp");
function getFileExtension($name): string|false
{
// split file name by dots
$arr = explode('.', strval($name));
// last array element has to be the file extension
$ext = array_pop($arr);
$ext = mb_strtolower(strval($ext));
// Return file extension string if whitelisted
if (array_key_exists($ext, $GLOBALS["imgWhiteList"])) {
return $ext;
}
return FALSE;
}
function magicBytesGIF($file): bool
{
if (!$handle = fopen($file, 'r')) return FALSE;
if (!$readBytes = fread($handle, 6)) return FALSE;
$readBytes = mb_strtoupper(bin2hex($readBytes));
if ($readBytes === "474946383761"
or $readBytes === "474946383961") {
return TRUE;
}
return FALSE;
}
function magicBytesJPG($file): bool
{
if (!$handle = fopen($file, 'r')) return FALSE;
if (!$readBytes12 = fread($handle, 12)
or !$readBytes4 = fread($handle, 4)) {
return FALSE;
}
fclose($handle);
$readBytes12 = mb_strtoupper(bin2hex($readBytes12));
$readBytes4 = mb_strtoupper(bin2hex($readBytes4));
// It must be one of these:
if ($readBytes4 == "FFD8FFDB" or $readBytes4 == "FFD8FFEE"
or $readBytes4 == "FFD8FFE0"
or $readBytes12 == "FFD8FFE000104A4649460001"
or preg_match("/FFD8FFE1[A-F0-9]{4}457869660000/", $readBytes12)) {
return TRUE;
}
return FALSE;
}
function magicBytesBMP($file): bool
{
if (!$handle = fopen($file, 'r')) return FALSE;
if (!$readBytes = fread($handle, 2)) return FALSE;
// file signature bitmap "42 4D" (2 Bytes always)
if (mb_strtoupper(bin2hex($readBytes)) == "424D") {
return TRUE;
}
return FALSE;
}
function isMP4File($filePath)
{
// Define the expected MP4 magic bytes
$expectedMagicBytes = "\x00\x00\x00\x20\x66\x74\x79\x70";
// Read the first 8 bytes of the file
$fileHandle = fopen($filePath, 'rb');
$fileHeader = fread($fileHandle, 8);
fclose($fileHandle);
// Compare the read bytes with the expected magic bytes
if ($fileHeader === $expectedMagicBytes) {
return true;
}
return false;
}
// Usage
$filePath = 'path/to/your/file.mp4';
if (isMP4File($filePath)) {
echo 'This is an MP4 file.';
} else {
echo 'This is not an MP4 file.';
}
https://dev.to/yasuie/php-file-upload-check-uploaded-files-with-magic-bytes-54oe
반응형
'Program Language > PHP' 카테고리의 다른 글
PHP 정규식 예제 (0) | 2024.04.16 |
---|---|
[PHP] 구글 OTP 연동 (0) | 2024.03.20 |
PHP 개행문자 또는 특정 문자열 취환하기 (0) | 2023.11.03 |
CentOS php7 업그레이드 하기 (0) | 2023.03.27 |
PHP 다중쿼리 mysqli_multi_query 트랜잭션 예제 (0) | 2023.03.08 |