Semakan logik pemprosesan muat naik fail PHP (analisis komprehensif)

藏色散人
Lepaskan: 2023-04-11 08:38:02
ke hadapan
3214 orang telah melayarinya

Artikel ini akan memperkenalkan kepada anda analisis pelaksanaan logik muat naik fail PHP Pelaksanaan seperti ini mestilah agak biasa dalam projek. Mari kita lihat~ Saya harap ia akan membantu rakan-rakan yang memerlukan~

Pemprosesan nama fail

Nama fail bergantung pada keperluan perniagaan. Jika tidak ada keperluan untuk mengekalkan nama asal, hanya jana nama secara rawak dan tambah akhiran yang disahkan oleh senarai putih. [Pembelajaran yang disyorkan: Tutorial video PHP]

Sebaliknya, kendalikannya dengan berhati-hati:

//允许上传的后缀白名单
$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
Salin selepas log masuk

Pemprosesan kandungan fail

Fail Akhiran hanya dangkal Menukar akhiran fail PHP kepada jpg tidak akan mengubah fakta bahawa ia membawa kod PHP.

Untuk fail imej, anda boleh membaca pengepala fail imej untuk menentukan jenis imej, saya belum menguji kaedah ini, jika anda berminat, anda boleh mengujinya sendiri.

Selain itu, walaupun kaedah di atas boleh dilaksanakan, ia masih boleh dipintas hanya bait ciri pengepala jenis imej tertentu dalam pengepala fail php untuk menyamarkannya.

Untuk pemprosesan kandungan fail imej, helah sebenar ialah melukis semula imej.

Gunakan arahan salin di bawah sistem Windows untuk mencipta fail imej yang mengandungi kod php Perintahnya adalah seperti berikut:

Copy 1.jpg/b + test.php/a 2.jpg
Salin selepas log masuk

Arahan di atas bermaksud untuk menggabungkan test.php ke dalam 1.jpg. . tail, dan eksport semula ke 2.jpg Dengan cara ini, 2.jpg ini ialah fail imej yang mengandungi kod PHP. Anda boleh membukanya dengan Notepad dan seret bar skrol ke bawah untuk melihat kod PHP.

Untuk gambar yang tidak bersih seperti ini, anda boleh membuang bahagian yang kotor dengan melukis semula gambar tersebut. Berikut ialah kod php untuk melukis semula imej:

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);
}
Salin selepas log masuk

Kelemahan kaedah ini ialah ia menggunakan memori, imej diherotkan dan ia hanya boleh memproses imej.

Sudah tentu, saya tidak tahu sama ada format fail lain boleh diproses menggunakan kaedah lukisan semula.

Pemprosesan kebenaran fail

Kami hanya membincangkan kebenaran di bawah Linux Mari kita perkenalkan secara ringkas kebenaran di bawah Linux:

读取,字母 r 或数字 4 表示
写入,字母 w 或数字 2 表示
执行,字母 x 或数字 1 表示
Salin selepas log masuk

Untuk fail, rwx The. maksudnya adalah seperti berikut:

r:可打开读取此文件
w:可写入此文件
x:可执行此文件
Salin selepas log masuk

Untuk direktori, maksud rwx berbeza sedikit:

r:可读取此目录的内容列表
w:可在此目录里面进行:增、删、改文件和子目录
x:可进入此目录
Salin selepas log masuk

Selain itu, dalam Linux, pengguna akan dibahagikan kepada tiga jenis untuk fail. Mereka ialah: pengguna yang mencipta fail, pengguna yang berada dalam kumpulan pengguna yang sama dengan pengguna yang mencipta fail dan pengguna lain yang bukan pencipta mahupun kumpulan yang sama.

Dengan pemahaman tentang kebenaran Linux, 755 kebenaran harus ditetapkan untuk direktori di mana fail yang dimuat naik berada, yang bermaksud:

  • Pengguna yang mencipta direktori mempunyai akses baca , tulis dan masukkan kebenaran ke direktori ini

  • Pengguna dalam kumpulan pengguna yang sama dengan pengguna yang mencipta direktori mempunyai kebenaran untuk membaca dan memasuki direktori ini

  • Pengguna lain yang bukan pencipta mahupun kumpulan yang sama mempunyai kebenaran untuk membaca dan memasuki direktori ini

Tetapan kebenaran 755 membenarkan nginx ke fail statik proksi No 403 ralat akan dilaporkan.

Contoh kod:

mkdir($save_path, 0755, true);
Salin selepas log masuk

Gunakan tetapan kebenaran yang lebih ketat untuk 644 kebenaran yang dimuat naik harus ditetapkan, yang bermaksud:

  • Pengguna yang. mencipta fail mempunyai kebenaran membaca dan menulis kepada fail ini dan tidak boleh melaksanakan

  • Pengguna dalam kumpulan pengguna yang sama dengan pengguna yang mencipta fail hanya mempunyai kebenaran membaca

  • Pengguna lain yang bukan pencipta mahupun kumpulan yang sama hanya mempunyai kebenaran membaca

644 tetapan kebenaran untuk memastikan walaupun fail Haram tidak boleh diubah suai atau dilaksanakan.

Contoh kod:

chmod($file, 0644);
Salin selepas log masuk

Pemprosesan pelayan fail

Beli wang untuk membeli perkhidmatan storan oss, jangan risau tentang sebarang perkara remeh , teruskan saja Buangnya.

Alamat asal: https://learnku.com/articles/73100
Blog pengarang: https://learnku.com/blog/buexplain

Atas ialah kandungan terperinci Semakan logik pemprosesan muat naik fail PHP (analisis komprehensif). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:learnku.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan