多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > PHP文件上傳一些小收獲

PHP文件上傳一些小收獲

來源:程序員人生   發布時間:2013-11-24 07:53:25 閱讀次數:3348次

又碼了一個周末的代碼,這次在做一些關于文件上傳的東西,(PHP UPLOAD)小有收獲項目是一個BT種子列表,用戶有權限上傳自己的種子,然后配合BT TRACK服務器把種子的信息寫出來.

開始覺得這玩意很簡單,結果嘛慘不忍睹.用CodeIgniter的上傳類來上傳文件,一開始進展蠻順利的,但發覺走到上傳文件類型的時候就走不下去了,我明明添加了.torrent類型為可上傳類型,結果無論我怎么傳也傳不上去,還提示我上傳文件類型不對.汗森了,這可是貨真價實的種子文件啊,難道CI只認可島國的種子嗎?

打開CI的上傳類看代碼,原來CI的UPLOAD是通過判斷文件的來實現文件識別的.難怪,種子的MIME類型在一般瀏覽器上返回的都是二進制數據類型,看來只有自己動手改造一下了.

為了盡快完成項目,我直接從控制器(Controller)開始寫代碼.用$_FILE['file']['name']獲取上傳文件的文件名,然后用explode函數來獲取后綴名,最后再調用CI的UPLOAD來上傳文件.

PHP實例代碼如下:

  1. $config['upload_path'] = './uploads/';    
  2. $config['allowed_types'] = '*';    
  3. $config['max_size'] = '100';    
  4. $this->load->library('upload',$config);    
  5. $this->load->helper('security');    
  6. $this->load->helper('date');    
  7. $this->load->helper('url');    
  8. $this->load->model('bt_model','',TRUE);    
  9. $data['source_url'] = base_url().'source';    
  10. $data['base_url'] = base_url();    
  11. $file = $_FILES['upload_file']['name'];    
  12. $file_1 = explode('.',$file);    
  13. $file_2 = $file_1[count($file_1)-1];    
  14. if($file_2 <> 'torrent'){    
  15.     echo '<script>alert("只能上傳類型為torrent的種子文件");</script>';    
  16.     echo '<script>window.location.href="'.$data['base_url'].'index.php/index/post";</script>';    
  17.     return;    
  18. }    
  19. $data['type'] = xss_clean($this->input->post('type'));    
  20. $data['name'] = xss_clean($this->input->post('name'));    
  21. $data['space'] = xss_clean($this->input->post('space'));    
  22. $data['username'] = xss_clean($this->input->post('username'));    
  23. $data['time'] = mdate('%Y-%m-%d %G:%i',gmt_to_local(time(),'UP8'));    
  24. if($data['type'] == '' || $data['name'] == '' || $data['space'] == '' || $data['username'] == ''){    
  25.     echo '<script>alert("信息填寫不完整,請重新填寫");</script>';    
  26.     echo '<script>window.location.href="'.$data['base_url'].'index.php/index/post";</script>';    
  27.     return;    
  28. }    
  29. $this->upload->do_upload('upload_file');    
  30. echo $this->upload->display_errors();    
  31. $file = $this->upload->data();    
  32. $data['url'] = $data['base_url'].'uploads/'.$file['file_name'];    
  33. $this->bt_model->insert($data);    
  34. echo '<script>alert("上傳成功");</script>';    
  35. echo '<script>window.location.href="'.$data['base_url'].'";</script>'

原理大致是這樣的,獲取上傳文件的文件名,然后通過explode()函數來分割文件名以獲取后綴,得到后綴之后與允許上傳類型做比較,最后上傳.

講到上傳,我又想到了原來那個特別流行的MIME上傳漏洞.很簡單,當網站判斷上傳文件類型時只判斷MIME類型那么就會造成上傳漏洞.因為上傳時服務器得到的MIME類型是從客戶端發過來的,也就是說MIME類型的值是可以被用戶控制的,攻擊者克構造虛假的MIME類型來上傳webshell.

所以判斷文件類型的時候還是檢測文件后綴名吧,最好只給上傳目錄一個可讀權限,關閉執行權限,這樣比較靠譜.

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲国产精品自产拍在线播放 | 免费大片黄在线观看日本 | 欧美日韩亚洲另类 | 欧美色欧美亚洲另类二区精品 | 国产精品嫩草影院视频 | 亚洲精品一区二区乱码在线观看 | 亚洲国产精品yw在线观看 | h网站在线 | 国产a不卡 | 国内精品久久国产 | 亚洲天堂2013| 日本免费乱人伦在线观看 | 亚洲国产成人久久精品影视 | 四虎必出精品亚洲高清 | 伊人网站在线 | 午夜www| 亚洲一区二区三区四区在线观看 | 图片区小说区综合区 | 国产一区二区在线免费观看 | 色人阁在线 | 国产婷婷丁香久久综合 | 亚洲欧美日韩第一页 | 网址在线 | 特黄色一级毛片 | 精品国产福利久久久 | 最近免费中文字幕大全高清mv | 国产丝袜一区二区三区在线观看 | 国产精品高清一区二区 | 伊人剧场| 日韩一区国产二区欧美三 | 日本一区二区三区不卡在线视频 | 国产精品亚洲精品久久成人 | 日本aaaaa特黄毛片 | 成人看片毛片免费播放器 | 欧美最猛黑人xxxxwww | 国产片免费看 | 午夜在线免费观看 | 久久亚洲精品中文字幕三区 | 久久精品久久精品久久精品 | 中文字幕日本一本二本三区 | 最近最新手机中文字幕在线看 |