php escapeshellcmd多字節編碼漏洞_PHP教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:詳細講解PHP中緩存技術的應用
      PHP,一門最近幾年興起的web設計腳本語言,由于它的強大和可伸縮性,近幾年來得到長足的發展,php相比傳統的asp網站,在速度上有絕對的優勢,想mssql轉6萬條數據php如需要40秒,asp不下2分鐘.但是,由于

      漏洞公告在http://www.sektioneins.de/advisories/SE-2008-03.txt

      PHP 5 <= 5.2.5

      PHP 4 <= 4.4.8

      一些允許如GBK,EUC-KR, SJIS等寬字節字符集的系統都可能受此影響,影響還是非常大的,國內的虛擬主機應該是通殺的,在測試完這個漏洞之后,發現還是十分有意思的,以前也有過對這種類型安全漏洞的研究,于是就把相關的漏洞解釋和一些自己的想法都寫出來,也希望國內的一些有漏洞的平臺能迅速做出響應,修補漏洞。

      這個漏洞出在php的用來轉義命令行字符串的函數上,這些函數底層是用的php_escape_shell_cmd這個函數的,我們先來看看他的處理過程:

       /*{{{php_escape_shell_cmd
      Escapeallcharsthatcouldpossiblybeusedto
      breakoutofashellcommand
      Thisfunctionemalloc'sastringandreturnsthepointer.
      Remembertoefreeitwhendonewithit.
      *NOT*safeforbinarystrings
      */
      char*php_escape_shell_cmd(char*str){
      registerintx,y,l;
      char*cmd;
      char*p=NULL;
      l=strlen(str);
      cmd=safe_emalloc(2,l,1);
      for(x=0,y=0;x<l;x ){
      switch(str[x]){
      case'"':
      case''':
      #ifndefPHP_WIN32
      if(!p&&(p=memchr(str x 1,str[x],l-x-1))){
      /*noop*/
      }elseif(p&&*p==str[x]){
      p=NULL;
      }else{
      cmd[y ]='';
      }
      cmd[y ]=str[x];
      break;
      #endif
      case'#':/*Thisischaracter-setindependent*/
      case'&':
      case';':
      case'`':
      case'|':
      case'*':
      case'?':
      case'~':
      case'<':
      case'>':
      case'^':
      case'(':
      case')':
      case'[':
      case']':
      case'{':
      case'}':
      case'$':
      case'':
      case'x0A':/*excludingthesetwo*/
      case'xFF':
      #ifdefPHP_WIN32
      /*sinceWindowsdoesnotallowustoescapethesechars,justremovethem*/
      case'%':
      cmd[y ]='';
      break;
      #endif
      cmd[y ]='';
      /*fall-through*/
      default:
      cmd[y ]=str[x];
      }
      }
      cmd[y]='';
      returncmd;
      }
      /*}}}*/

      分享:利用PHP V5開發多任務應用程序
      許多 PHP 開發人員認為,由于標準的 PHP 缺少線程功能,因此實際 PHP 應用程序不可能執行多任務處理。例如,如果應用程序需要其他 Web 站點的信息,那么在遠程檢索完成之前它都必須停止。這是錯

      共3頁上一頁123下一頁
      來源:模板無憂//所屬分類:PHP教程/更新時間:2008-08-22
      相關PHP教程