最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP文件上傳功能實現(xiàn)邏輯分析

 更新時間:2022年11月29日 11:00:42   作者:憂郁的鳥蛋  
文件上傳是開發(fā)中常見的一個功能,下面這篇文章主要給大家介紹了關于PHP文件上傳實現(xiàn)邏輯分析,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

文件名字處理

文件名字得看業(yè)務要求。不需要保留原始名字,則隨機生成名字,拼接上白名單校驗過的后綴即可。

反之要謹慎處理:

//允許上傳的后綴白名單
$extension_white_list = ['jpg', 'pdf'];
//原始文件的名字
$origin_file_name = 'xx/xxx/10月CPI同比上漲2.1%.php.pdf';
//提取文件后綴,并校驗是否在白名單內(nèi)
$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

文件內(nèi)容處理

文件后綴只是表面,一個 php 文件,把后綴改成 jpg,也改變不了它攜帶 php 代碼的事實。

針對圖片文件,可以讀取圖片文件頭判斷圖片類型,當然我也沒測試過這個方法,感興趣的可以自測。

另外即便上述方法可行,依然可以繞過,只要在 php 文件的頭部寫入某個圖片類型的頭部特征的字節(jié)即可偽裝。

針對圖片文件內(nèi)容處理,真正的大招是重繪圖片。

windows 系統(tǒng)下用 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);
}

這個處理辦法的缺點是,耗費內(nèi)存,圖片失真,而且只能處理圖片。

當然其它的文件格式,我也不知道能不能用重繪的思路去處理。

文件權限處理

只討論 Linux 下的權限,先簡單介紹 Linux 的權限:

讀取,字母 r 或數(shù)字 4 表示
寫入,字母 w 或數(shù)字 2 表示
執(zhí)行,字母 x 或數(shù)字 1 表示

對文件來講,rwx 是如下含義:

r:可打開讀取此文件
w:可寫入此文件
x:可執(zhí)行此文件

對目錄來講,rwx 的含義又有點差別:

r:可讀取此目錄的內(nèi)容列表
w:可在此目錄里面進行:增、刪、改文件和子目錄
x:可進入此目錄

另外 Linux 里面,針對一個文件,用戶是會被分成三種,分別是:創(chuàng)建該文件的用戶、和創(chuàng)建該文件的用戶處于同一用戶組的用戶、既不是創(chuàng)建者也不是同一個小組的其它用戶。

有了對 Linux 的權限了解,針對上傳的文件所在的目錄,應該設定 755 權限,表示:

  • 創(chuàng)建該目錄的用戶有讀取、寫入、進入此目錄的權限
  • 和創(chuàng)建該目錄的用戶處于同一用戶組的用戶有讀取、進入此目錄的權限
  • 既不是創(chuàng)建者也不是同一個小組的其它用戶有讀取、進入此目錄的權限

755 的權限設定,可以讓 nginx 代理靜態(tài)文件的時候不會報 403 錯誤。

代碼示例:

mkdir($save_path, 0755, true);

針對上傳的文件,采用更嚴格的權限設定,應該設定 644 權限,表示:

創(chuàng)建該文件的用戶有讀取、寫入此文件的權限,無法執(zhí)行

和創(chuàng)建該文件的用戶處于同一用戶組的用戶只有讀取權限

既不是創(chuàng)建者也不是同一個小組的其它用戶只有讀取權限

644 的權限設定,可以確保即便是上傳了一個非法文件也無法串改內(nèi)容、執(zhí)行。

代碼示例:

chmod($file, 0644);

到此這篇關于PHP文件上傳功能實現(xiàn)邏輯分析的文章就介紹到這了,更多相關PHP文件上傳內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • php取得字符串首字母的方法

    php取得字符串首字母的方法

    這篇文章主要介紹了php取得字符串首字母的方法,支持中文字符串的操作,涉及php操作字符串的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • ie與session丟失(新窗口cookie丟失)實測及解決方案

    ie與session丟失(新窗口cookie丟失)實測及解決方案

    正如標題所言測試結果為:如果cookie設置是延后定時失效,而非進程級的,那在open后也能看到,所以,針對此情況,防止用戶在使用ie內(nèi)核出現(xiàn)登錄狀態(tài)丟失,可以配合cookie來使用
    2013-07-07
  • PHP操作XML中XPath的應用示例

    PHP操作XML中XPath的應用示例

    這篇文章主要介紹了PHP操作XML中XPath的應用,結合實例形式分析了php使用XPath進行xml節(jié)點查詢的相關操作技巧,需要的朋友可以參考下
    2019-07-07
  • PHP一文帶你搞懂游戲中的抽獎算法

    PHP一文帶你搞懂游戲中的抽獎算法

    這篇文章將通過示例詳細為大家講解一下游戲中的抽獎算法,文中的示例代碼講解詳細,對我們學習PHP有一定的幫助,需要的可以參考一下
    2022-06-06
  • php中l(wèi)aravel調度執(zhí)行錯誤解決方法

    php中l(wèi)aravel調度執(zhí)行錯誤解決方法

    在本篇內(nèi)容里小編給大家整理的是一篇關于php中l(wèi)aravel調度執(zhí)行錯誤解決方法,對此有興趣的朋友們可以學習參考下。
    2021-02-02
  • 10個實用的PHP正則表達式匯總

    10個實用的PHP正則表達式匯總

    這篇文章主要介紹了10個實用的PHP正則表達式匯總,非常具有實用價值,需要的朋友可以參考下
    2014-10-10
  • 使用WordPress發(fā)送電子郵件的相關PHP函數(shù)用法解析

    使用WordPress發(fā)送電子郵件的相關PHP函數(shù)用法解析

    這篇文章主要介紹了使用WordPress發(fā)送電子郵件的相關PHP函數(shù)用法解析,文中還提到了常見的郵件無法發(fā)送的情況的解決,需要的朋友可以參考下
    2015-12-12
  • PHP+MySQL高并發(fā)加鎖事務處理問題解決方法

    PHP+MySQL高并發(fā)加鎖事務處理問題解決方法

    這篇文章主要介紹了PHP+MySQL高并發(fā)加鎖事務處理問題解決方法,結合實例形式分析了PHP+MySQL事務處理相關操作技巧與注意事項,需要的朋友可以參考下
    2018-04-04
  • php實現(xiàn)zip文件解壓操作

    php實現(xiàn)zip文件解壓操作

    這篇文章主要介紹了php實現(xiàn)zip文件解壓操作的函數(shù)代碼,每一條函數(shù)代碼都有對應的文字注釋,需要的朋友可以參考下
    2015-11-11
  • PHP二維數(shù)組去重實例分析

    PHP二維數(shù)組去重實例分析

    這篇文章主要介紹了PHP二維數(shù)組去重的方法,結合實例形式分析了php數(shù)組遍歷、判斷及去除重復項的相關操作技巧,需要的朋友可以參考下
    2016-11-11

最新評論

建阳市| 深圳市| 惠东县| 榆社县| 榆社县| 巴林左旗| 龙山县| 都昌县| 买车| 易门县| 江华| 岗巴县| 洪江市| 抚松县| 绵竹市| 攀枝花市| 衢州市| 南郑县| 滕州市| 丹棱县| 友谊县| 宣城市| 霍邱县| 乐陵市| 万州区| 平阳县| 普定县| 沁水县| 鹿泉市| 综艺| 伊宁市| 大庆市| 南皮县| 库伦旗| 盈江县| 阿瓦提县| 岢岚县| 贺州市| 三门县| 万山特区| 南华县|