本文小編為大家詳細介紹“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 系統下用 copy 命令可以制作一個包含 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 里面,針對一個文件,用戶是會被分成三種,分別是:創建該文件的用戶、和創建該文件的用戶處于同一用戶組的用戶、既不是創建者也不是同一個小組的其它用戶。
有了對 Linux 的權限了解,針對上傳的文件所在的目錄,應該設定 755 權限,表示:
創建該目錄的用戶有讀取、寫入、進入此目錄的權限
和創建該目錄的用戶處于同一用戶組的用戶有讀取、進入此目錄的權限
既不是創建者也不是同一個小組的其它用戶有讀取、進入此目錄的權限
755 的權限設定,可以讓 nginx 代理靜態文件的時候不會報 403 錯誤。
代碼示例:
mkdir($save_path, 0755, true);
針對上傳的文件,采用更嚴格的權限設定,應該設定 644 權限,表示:
創建該文件的用戶有讀取、寫入此文件的權限,無法執行
和創建該文件的用戶處于同一用戶組的用戶只有讀取權限
既不是創建者也不是同一個小組的其它用戶只有讀取權限
644 的權限設定,可以確保即便是上傳了一個非法文件也無法串改內容、執行。
代碼示例:
chmod($file, 0644);
文件服務器處理
掏錢買個 oss 存儲服務吧,啥雞毛都不考慮了,直接丟上去。
讀到這里,這篇“PHP文件上傳處理邏輯是什么”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注創新互聯行業資訊頻道。
分享題目:PHP文件上傳處理邏輯是什么
分享鏈接:http://www.2m8n56k.cn/article24/jssgce.html
成都網站建設公司_創新互聯,為您提供商城網站、網站設計公司、標簽優化、網站改版、靜態網站、網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯