PHP 撰寫 檔案 上傳 功能 注意 事項

Subtitle

作者: 七味粉 |
文章2013-07-06
125 分享
188
PHP 在撰寫檔案上傳功能的時候,這邊有幾個事情要注意,上傳功能沒有寫好,很有可能讓駭客上傳 Web Shell,什麼是 Web Shell?簡單來說就是駭客將木馬程式 PHP 檔案混在你的網站中,然後駭客就可以用網頁的方式來查看資料庫、執行語法命令等危害網站的事情。像是偉大的 b374k-shell 就把所有功能都包好了,駭客只要想辦法上傳到別人網站裡面執行,就什麼事情都可以做了 ^o^


那要怎麼樣讓你的檔案上傳功能強化呢?起碼不要讓別人有機會上傳 Web Shell 到你的網站,這邊介紹幾個方法給大家:
  • 檔案上傳的資料夾不能執行 .php

  • 在撰寫檔案上傳功能的時候,通常都會預設一個上傳資料夾,對於這個資料夾的權限要相當注意,最重要的就是不能擁有執行 .php 的權限,只要這邊設定正確,就算 Web Shell 被上傳了,不能執行也沒有。
    
    
    [shell]vim uploadfile/.htaccess
    [vim]
    order allow,deny
    deny from all
    [/vim]
    [com]在你的 upload file 裡面設定 .htaccess[/com]

  • 對上傳檔案做 resize 及 修改檔案名稱

  • 針對上傳檔案使用 resize() 函數,在處理圖片的同時可以順便破壞偽冒圖片的 HTML 結構。
    
    
    <?php
    // 傳上來的檔案
    $filename = 'test.jpg';
    // resize 的比例,若只是要破壞結構,可以維持比例 1.0
    $percent = 0.5;
    // 取得原本圖片長與寬的尺寸
    list($width, $height) = getimagesize($filename);
    // 取得新的尺寸
    $newwidth = $width * $percent;
    $newheight = $height * $percent;
    // 載入
    $thumb = imagecreatetruecolor($newwidth, $newheight);
    $source = imagecreatefromjpeg($filename);
    // resize 重新定義尺寸
    /* 參數順序 ( 新圖片、舊圖片、新圖片的距離起始點的 x 座標、新圖片的距離起始點的 y 座標、
    舊圖片的距離起始點的 y 座標、舊圖片的距離起始點的 y 座標、新圖片的長、新圖片的寬、
    舊圖片的長、舊圖片的寬)*/
    imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
    //設定圖檔的檔名,由uniqid + rand(10000-99999) 組成
    $FileName = uniqid() . rand(10000,99999) . ".jpg";
    //修改圖檔路徑
    $ImagePath = dirname(__FILE__) . "/uploadimages/" . $FileName;
    //將檔案儲存至資料夾
    imagejpeg($thumb, $ImagePath);
    ?>
    貼心小提醒
    1.您目前未登入,若於此狀態進行文章收藏,紀錄可能無法長期保留。
    2.建議登入後進行收藏,好文會幫你保存著,隨時要看也不怕找不到唷~

    KiKiNote持續為您提供最優質的資訊內容,謝謝您!
    不再顯示此視窗

    複製成功