熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PHP編程 >> 正文

PHP網絡開發詳解:文件上傳漏洞

2013-11-15 12:43:23  來源: PHP編程 
    ——此文章摘自《完全手冊PHP網絡開發詳解》定價 特價 詳細>>http://tracklinktechcn/?m_id=dangdang&a_id=A&l=&l_type= width= height= border= nosave>

    在很多網站中特別是在論壇系統中往往存在文件上傳的功能文件上傳功能允許用戶將本地的文件通過Web頁面提交到網站服務器上但是如果不對用戶的上傳進行任何限制的話可能會對服務器造成很大的危害

    一個簡單的文件上傳頁面

    以下代碼是一個簡單的文件上傳頁面
    <?php
    if(isset($_POST[form]))
    {
        $uploadfile = upfiles/$_FILES[upfile][name];
                                                //上傳後文件所在的文件名和路徑
        move_uploaded_file($_FILES[upfile][tmp_name] $uploadfile);                                                                 //上傳文件
        print_r($_FILES);                                       //輸出文件信息
        die();
    }
    ?>
    <html>
    <head>
    <title>文件上傳</title>
    <meta httpequiv=ContentType content=text/html; charset=gb>
    </head>
    <H>文件上傳</H>
    <form enctype=multipart/formdata action= method=post>
      <input name=upfile type=file>
            <input name=form type=hidden value=form><BR>
      <input type=submit value=Submit>
    </form>
    <body>
    </body>
    </html> 

    上面的代碼將文件上傳到網站服務器並存儲在upfiles文件夾下但是由於上面的文件上傳程序沒有對上傳的文件進行任何檢查用戶可以通過該程序上傳自行編寫的PHP腳本到服務器上並通過浏覽器運行由於PHP腳本潛在的危害性該漏洞可能會導致服務器的徹底崩潰及數據的丟失

    漏洞防護措施

    解決上面所述問題的一種方法是通過檢查上傳文件的類型來限制用戶的文件上傳如以下代碼所示
    <?php
    if(isset($_POST[form]))
    {
        if($_FILES[upfile][type] == image/pjpeg)    //檢查文件類型是否為JPEG
        {
            $uploadfile = upfiles/$_FILES[upfile][name];
                                                      //上傳後文件所在的文件名和路徑
            move_uploaded_file($_FILES[upfile][tmp_name] $uploadfile);
                                                                    //上傳文件
            print_r($_FILES);
            die();
        }
        else
        {
            die(上傳文件的格式不正確!);
        }
    }
    ?>

    上面的代碼要求用戶上傳的文件必須是JPEG類型的圖片文件徹底地避免了終端用戶通過上傳PHP腳本危害服務器的行為


From:http://tw.wingwit.com/Article/program/PHP/201311/21477.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.