日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內(nèi)最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當前位置:首頁 > php開源 > php教程 > PHP文件上傳一些小收獲

PHP文件上傳一些小收獲

來源:程序員人生   發(fā)布時間:2013-11-24 07:53:25 閱讀次數(shù):3367次

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

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

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

為了盡快完成項目,我直接從控制器(Controller)開始寫代碼.用$_FILE['file']['name']獲取上傳文件的文件名,然后用explode函數(shù)來獲取后綴名,最后再調(diào)用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()函數(shù)來分割文件名以獲取后綴,得到后綴之后與允許上傳類型做比較,最后上傳.

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

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

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 日韩精品一级毛片在线播放 | 中国久久 | 国产欧美日本在线 | 亚洲久久 | 日韩成人影院在线观看 | 天堂аⅴ在线最新版在线 | 国产成人免费在线 | 天堂а在线中文在线无限看推荐 | 亚洲精品在线观看视频 | 亚洲区视频在线 | 国产又爽又黄的激情精品视频 | 久久国产视屏 | 免费的av网站 | 99国产精品视频免费观看 | 欧美大jb | 色婷婷综合国产精品一区 | 成人在线免费网站 | 在线免费看黄网站 | 成人黄色毛片视频 | 日韩在线视频一区二区三区 | 人人射| 欧美一级大片 | 韩日av在线 | 污网站在线看 | 亚洲自拍第二页 | 国产激情二区 | 欧美日韩精品免费观看视频 | 美国成人毛片 | 国产v日产∨综合v精品视频 | 99久久九九| 久久久久久久久久久久久女国产乱 | 久久久久久亚洲av毛片大全 | 欧美成人免费在线 | 国产中文一区二区三区 | 国产精品久久一区二区三区 | 国产日韩视频 | 精品国产一区二区三区性色av | 亚洲欧洲成人精品av97 | 久久久久久久国产精品 | 国产伦精品一区二区三区免费视频 | 国厂自拍 |