<output id="r87xx"></output>
    1. 
      
      <mark id="r87xx"><thead id="r87xx"><input id="r87xx"></input></thead></mark>
        •   

               當(dāng)前位置:首頁>軟件介紹>PHP編程要注意的安全問題 查詢:
               
          PHP編程要注意的安全問題

          <?php

          nl2br(); //  to 

          addslashes(); 

          stripslashes(); //對(duì)數(shù)據(jù)庫(kù)操作時(shí),轉(zhuǎn)義特殊字符

          chop(); //除去字符串右邊空格

          trim(); //除去字符串中所有空格

          ltrim(); //除去字符串左邊空格

          htmlspecialchars(); //轉(zhuǎn)換'$','"','<','>'為相應(yīng)的html實(shí)體

          htmlentities(); //轉(zhuǎn)換所有html標(biāo)記為相應(yīng)的html實(shí)體

          //兩個(gè)函數(shù)在格式化帶有英文字符的html代碼的時(shí)候基本沒啥問題,但是htmlentities對(duì)中文字符也不放過,這樣得出來的結(jié)果是中文字符部分變?yōu)橐欢褋y碼。

          array explode(string separator, string str); //分割字符串

          string implode(string separator, array arr); //連接字符串

          strtoupper(); strtolower(); //轉(zhuǎn)換大小寫

          ucfirst(); //只轉(zhuǎn)換第一個(gè)字符為大寫

          ucwords(); //轉(zhuǎn)換每個(gè)words的第一個(gè)字母為大寫

          mysql_real_escape_string()//本函數(shù)將unescaped_string 中的特殊字符轉(zhuǎn)義,并計(jì)及連接的當(dāng)前字符集,因此可以安全用于。注: () 并不轉(zhuǎn)義% 和_。

          ?>

          //防止sql注入

          在PHP編碼的時(shí)候,一些比較基本的安全問題

          1. 注意初始化你的變量

          2.防止SQL Injection (sql注射)

          我們知道Web上提交數(shù)據(jù)有兩種方式,一種是get、一種是post,那么很多常見的sql注射就是從get方式入手的,而且注射的語句里面一定是包含一些SQL語句的,因?yàn)闆]有SQL語句,那么如何進(jìn)行,sql語

          句有四大句:select 、update、delete、insert,那么我們?nèi)绻谖覀兲峤坏臄?shù)據(jù)中進(jìn)行過濾是不是能夠避免這些問題呢?

          于是我們使用正則就構(gòu)建如下函數(shù):

          (1)把select,insert,update,delete, union, into, load_file, outfile /*, ./ , ../ , ' 等等危險(xiǎn)的參數(shù)字符串全部過濾掉,處理掉' select * from ***的情況

          <?php

          /*

          函數(shù)名稱:inject_check()

          函數(shù)作用:檢測(cè)提交的值是不是含有SQL注射的字符,防止注射,保護(hù)服務(wù)器安全

          參數(shù):$sql_str: 提交的變量

          返回值:返回檢測(cè)結(jié)果,ture or false

          函數(shù)作者:heiyeluren

          */

          function inject_check($sql_str) {

          return

          eregi('select|insert|update|delete|'|/*|*|../|./|union|into|loa d_file|outfile', $sql_str); // 進(jìn)行過濾

          }

          ?>

          (2)處理掉a.php?id=1asdfasdfasdf

          <?php

          /*

          函數(shù)名稱:verify_id()

          函數(shù)作用:校驗(yàn)提交的ID類值是否合法

          參數(shù):$id: 提交的ID值

          返回值:返回處理后的ID

          函數(shù)作者:heiyeluren

          */

          function verify_id($id=null) {

          if (!$id) { exit('沒有提交參數(shù)!'); } // 是否為空判斷

          elseif (inject_check($id)) { exit('提交的參數(shù)非法!'); } // 注射判斷

          elseif (!is_numeric($id)) { exit('提交的參數(shù)非法!'); } // 數(shù)字判斷

          $id = intval($id); // 整型化

          return $id;

          }

          ?>

          (3)去除' _ ', ' % ',這些字符特殊意義字符

          <?php

          /*

          函數(shù)名稱:str_check()

          函數(shù)作用:對(duì)提交的字符串進(jìn)行過濾

          參數(shù):$var: 要處理的字符串

          返回值:返回過濾后的字符串

          函數(shù)作者:heiyeluren

          */

          function str_check( $str ) {

          if (!get_magic_quotes_gpc()) // 判斷magic_quotes_gpc是否打開

          {

          $str = addslashes($str); // 進(jìn)行過濾

          }

          $str = str_replace("_", "\_", $str); // 把'_'過濾掉

          $str = str_replace("%", "\%", $str); // 把' % '過濾掉 return $str;

          }

          ?>

          (4)對(duì)編輯內(nèi)容進(jìn)行過濾和轉(zhuǎn)換

          <?php

          /*

          函數(shù)名稱:post_check()

          函數(shù)作用:對(duì)提交的編輯內(nèi)容進(jìn)行處理

          參數(shù):$post: 要提交的內(nèi)容

          返回值:$post: 返回過濾后的內(nèi)容

          函數(shù)作者:heiyeluren

          */

          function post_check($post) {

          if (!get_magic_quotes_gpc()) // 判斷magic_quotes_gpc是否為打開

          {

          $post = addslashes($post); // 進(jìn)行magic_quotes_gpc沒有打開的情況對(duì)提交數(shù)據(jù)的過濾

          }

          $post = str_replace("_", "\_", $post); // 把'_'過濾掉

          $post = str_replace("%", "\%", $post); // 把' % '過濾掉

          $post = nl2br($post); // 回車轉(zhuǎn)換

          $post= htmlspecialchars($post); // html標(biāo)記轉(zhuǎn)換

          return $post;

          }

          ?>

          綜合來說即2個(gè),1. 初始化你的變量 2. 一定記得要過濾你的變量

          //服務(wù)器端用mysql_real_escape_string 清潔客戶端數(shù)據(jù)

          在服務(wù)器端清潔客戶端數(shù)據(jù)是每個(gè)程序員經(jīng)常要做的工作,雖然我們通常會(huì)在客戶端添加Javascript 驗(yàn)證,但是,惡意用戶很容易自己構(gòu)造FORM 提交數(shù)據(jù)以繞過客戶端驗(yàn)證,另外,在客戶端禁用Javascript 時(shí)驗(yàn)證同樣不能起到作用。因此,服務(wù)器端清潔數(shù)據(jù)必不可少,本文介紹的是用mysql_real_escape_string 清潔數(shù)據(jù)的方法,經(jīng)過清潔的數(shù)據(jù)可以直接插入到數(shù)據(jù)庫(kù)中。

          由于mysql_real_escape_string 需要MySQL 數(shù)據(jù)庫(kù)連接,因此,在調(diào)用mysql_real_escape_string 之前,必須連接上MySQL 數(shù)據(jù)庫(kù)。

          PHP:

          <?php

          // 說明:用array_map() 調(diào)用mysql_real_escape_string 清理數(shù)組

          // 整理:

           function mysqlClean($data)

           {

           return (is_array($data))?array_map('mysqlClean', $data):mysql_real_escape_string($data);

           }

           ?>

          調(diào)用方法

          PHP:

           <?php

           $conn = mysql_connect('localhost', 'user', 'pass');

           $_POST = mysqlClean($_POST);

           ?>

          經(jīng)過清潔的數(shù)據(jù)可以直接插入數(shù)據(jù)庫(kù)。

          注意!mysql_real_escape_string 必須在(PHP 4 >= 4.3.0, PHP 5)的情況下才能使用。否則只能用mysql_escape_string ,兩者的區(qū)別是:

          mysql_real_escape_string 考慮到連接的當(dāng)前字符集,而

          mysql_escape_string 不考慮。

          由于mysql_real_escape_string 需要MySQL 數(shù)據(jù)庫(kù)連接,因此,在調(diào)用mysql_real_escape_string 之前,必須連接上MySQL 數(shù)據(jù)庫(kù)。

          在知道數(shù)據(jù)類型為字符串時(shí),我們可以在清潔數(shù)據(jù)的同時(shí)限制字符串長(zhǎng)度。此方法來自David Lane, Hugh E. Williams《Web Database Application with PHP and MySQL 》(O'Reilly,May 2004)

          PHP:

          <?php

           // 說明:用mysql_real_escape_string 清潔并限制字符長(zhǎng)度

           // 整理:

           function mysqlClean($array, $index, $maxlength)

           {

           if (isset($array[$index]))

           {

           $input = substr($array["{$index}"], 0, $maxlength);

           $input = mysql_real_escape_string($input);

           return ($input);

           }

           return NULL;

           }

           ?>

          調(diào)用方法:

          PHP:

          <?php

           $conn = mysql_connect('localhost', 'user', 'pass');

           if(isset($_POST['username']))

           {

           $_POST['username'] = mysqlClean($_POST, 'username', 20);

           echo $_POST['username'];

           }

           ?>

          將$_POST 數(shù)組中的'username' 清潔并截取前20位字符。

          //關(guān)于sql注入

          //用戶發(fā)布的html,過濾危險(xiǎn)代碼

          function uh($str)

          {

          $farr = array(

          "/s+/", //過濾多余的空白

          "/<(/?)(scripti?framestylehtmlbodytitlelinkmeta?\%)([^>]*?)>/ isU", //過濾<script 等可能引入惡意內(nèi)容或惡意改變顯示布局的代碼,如果不需要插入flash等,還可以加入<object的過濾

          );

          $tarr = array(

          " ",

          "<>", //如果要直接清除不安全的標(biāo)簽,這里可以留空

          "",

          );

          $str = preg_replace( $farr,$tarr,$str);

          return $str;

          }

          SFun{var $Fun="now()";function

          SFun($Date=""){if($Date!="")$this->Fun=$Date;}}

          MySqlDB

          {

          var $dbConn;

          var $dbHost;

          var $dbUID;

          var $dbPWD;

          var $dbName;

          var $dbEncode;

          var $IsOp;

          MySqlDB($Host='localhost',$UID='root',$Pwd='',$Name='',$Enc ode='utf8')

          {

          $this->dbHost = $Host;

          $this->dbUID = $UID;

          $this->dbPWD = $Pwd;

          $this->dbName = $Name;

          $this->dbEncode = $Encode;

          $this->IsOp=false;

          }

          //打開數(shù)據(jù)庫(kù)

          Open()

          {

          if (!$this->dbConn)

          {

          @$this->dbConn = mysql_connect($this->dbHost, $this->dbUID, $this->dbPWD) or die("數(shù)據(jù)庫(kù)連接錯(cuò)誤!...");

          }

          mysql_query("SET NAMES '" . $this->dbEncode . "'");

          mysql_select_db($this->dbName);

          $this->IsOp=true;

          }

          //關(guān)閉數(shù)據(jù)庫(kù)

          Close()

          {

          if ($this->dbConn&&$this->IsOp)

          {

          mysql_close($this->dbConn);

          $this->IsOp=false;

          }

          }

          htmlrsp($str)

          {

          $str=str_replace("<","<",$str);

          $str=str_replace(">",">",$str);

          return $str;

          }

          //過濾XSS危險(xiǎn)腳本

          RemoveXSS($val) {

          if(strpos($val,"<")===false)return $val;

          $val = preg_replace('/([x00-x08][x0b-x0c][x0e-x20])/', '', $val);

          $search = 'abcdefghijklmnopqrstuvwxyz';

          $search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';

          $search .= '1234567890!@#$%^&*()';

          $search .= '~`";:?+/={}[]-_|'';

          for ($i = 0; $i < strlen($search); $i++) {

          $val =

          preg_replace('/(&#[x|X]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $val); // with a ;

          $val = preg_replace('/(?{0,8}'.ord($search[$i]).';?)/', $search[$i], $val); // with a ;

          }

          $ra1 = array('javascript', 'vbscript', 'expression', 'applet'); $ra2 = array('onabort', 'onactivate', 'onafterprint',

          'onafterupdate', 'onbeforeactivate', 'onbeforecopy',

          'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus',

          'onbeforepaste', 'onbeforeprint', 'onbeforeunload',

          'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange',

          'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect',

          'oncopy', 'oncut', 'ondataavailable', 'ondatasetchanged',

          'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag',

          'ondragend', 'ondragenter', 'ondragleave', 'ondragover',

          'ondragstart', 'ondrop', 'onerror', 'onerrorupdate',

          'onfilterchange', 'onfinish', 'onfocus', 'onfocusin',

          'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup',

          'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown',

          'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout',

          'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange',

          'onreadystatechange', 'onreset', 'onresize', 'onresizeend',

          'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete',

          'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload'); $ra = array_merge($ra1, $ra2);

          $val=preg_replace("'<script[^>]*?>.*?</script>'si","",$val); $val=preg_replace("'<style[^>]*?>.*?</style>'si","",$val);

          $val=preg_replace("/<(script|iframe|expression|applet|meta|xml| blink|style|frame|frameset|ilayer|layer|bgsound|title|base|link )(|[^>]+)>/i","",$val);

          $val=preg_replace("/</(script|iframe|expression|applet|meta|x ml|blink|style|frame|frameset|ilayer|layer|bgsound|title|base)> /i","",$val);

          $newval="";

          $idx=0;

          $edx=0;

          do

          {

          $idx=strpos($val,"<",$edx);

          if($idx!==false)

          {

          if($idx>$edx){

          $str=substr($val,$edx,$idx-$edx);

          $newval.=$this->htmlrsp($str);

          }

          $edx=strpos($val,">",$idx);

          if($edx!==false&&$edx>$idx)

          {

          $edx++;

          $tag=substr($val,$idx,$edx-$idx);

          $ridx=strrpos($tag,"<",1);

          if($ridx!==false){

          $str=substr($val,$idx,$ridx);

          $newval.=$this->htmlrsp($str);

          $idx=$idx+$ridx;

          $tag=substr($val,$idx,$edx-$idx);

          }

          if(stripos($tag,"on")===false)

          {$newval.=$tag;}

          else

          {

          for($j=0;$j<count($ra1);$j++){if(stripos($tag,$ra1[$j])!= =false){$tag=str_ireplace($ra1[$j],"",$tag);}}

          for($j=0;$j<count($ra2);$j++){

          if(stripos($tag,$ra2[$j])!==false){

          $tag=preg_replace('/'.$ra2[$j].'="[^"]+"/i',"",$tag); $tag=preg_replace("/".$ra2[$j]."='[^']+'/i","",$tag); $tag=preg_replace("/".$ra2[$j]."=[^ ]+>/i",">",$tag); $tag=preg_replace("/".$ra2[$j]."=[^ ]+ /i","",$tag); $tag=str_ireplace($ra2[$j],"",$tag);

          }}

          $newval.=$tag;

          }

          }

          else

          {

          $str=substr($val,$idx);

          $newval.=$this->htmlrsp($str);

          }

          }

          else

          {

          $str=substr($val,$edx);

          $newval.=$this->htmlrsp($str);

          }

          }while($idx!==false&&$edx!==false);

          return $newval;

          }

          //執(zhí)行SQL語句

          ExeSql($sql)

          {

          mysql_query($sql, $this->dbConn) or die("執(zhí)行SQL語句錯(cuò)誤...".$sql);

          }

          HGexecute($SqlArr)

          {

          mysql_query("SET AUTOCOMMIT=0");//設(shè)置為不自動(dòng)提交,因?yàn)镸YSQL默認(rèn)立即執(zhí)行

          mysql_query("BEGIN");//開始事務(wù)定義

          for($i=0;$i<count($SqlArr);$i++)

          {

          $sql=$SqlArr[$i];

          if(!mysql_query($sql, $this->dbConn))

          {

          mysql_query("ROLLBACK");//判斷執(zhí)行失敗回滾

          mysql_query("SET AUTOCOMMIT=1");

          return false;

          }

          }

          mysql_query("SET AUTOCOMMIT=1");

          mysql_query("COMMIT");//執(zhí)行事務(wù)

          return true;

          }

          //取SQL數(shù)據(jù)

          GetData($sql)

          {

          $result = mysql_query($sql, $this->dbConn) or die("查詢

          SQL語句錯(cuò)誤...".$sql);

          $records=array();

          //while($record = mysql_fetch_array($result))

          while($record = mysql_fetch_object($result))

          {

          $records[] = $record;

          }

          return $records;

          }

          _T($str){

          $str=$this->RemoveXSS($str);

          $str=str_replace('','',$str);

          $str=str_replace(''',''',$str);

          //$str=str_replace('"','"',$str); return $str;}

          GetOne($sql)

          {

          $records=$this->GetData($sql);

          return $records[0];

          }

          Like($str)

          {

          $str=$this->_T($str);

          $str=str_replace('%','\%',$str);

          return $str;

          }

          //插入記錄

          Add($Tb,$A,$IsId=false)

          {

          $SqlKey=array();

          $SqlArr=array();

          foreach ($A as $key=>$value)

          {

          $SqlKey[]="`".$key."`";

          if($value===NULL)

          $SqlArr[]="NULL";

          else

          if(gettype($value)=="integer"||gettype($value)=="boolean"||gett ype($value)=="double"||gettype($value)=="float")

          $SqlArr[]=$value;

          else if(gettype($value)=="object")

          $SqlArr[]=$value->Fun;

          else

          $SqlArr[]="'".$this->_T($value)."'";

          }

          $Sql="INSERT INTO ".$Tb."(".join(",",$SqlKey).") VALUES (".join(",",$SqlArr).")";

          mysql_query($Sql, $this->dbConn) or die("執(zhí)行SQL語句錯(cuò)誤...".$Sql);

          if($IsId)

          return mysql_insert_id($this->dbConn);

          else

          return 0;

          }

          Update($Tb,$A,$Id)

          {

          $Id=intval($Id);

          $SqlArr=array();

          foreach ($A as $key=>$value)

          {

          if($value===NULL)

          $SqlArr[]="`".$key."`=NULL";

          else

          if(gettype($value)=="integer"||gettype($value)=="boolean"||gett ype($value)=="double"||gettype($value)=="float")

          $SqlArr[]="`".$key."`=".$value;

          else if(gettype($value)=="object")

          $SqlArr[]="`".$key."`=".$value->Fun;

          else

          $SqlArr[]="`".$key."`='".$this->_T($value)."'";

          }

          $Sql="update ".$Tb." set ".join(",",$SqlArr)." where id=".$Id; mysql_query($Sql, $this->dbConn) or die("執(zhí)行SQL語句錯(cuò)誤...".$Sql);

          }

          Del($Tb,$Id)

          {

          $Id=intval($Id);

          $Sql="delete from ".$Tb." where id=".$Id;

          mysql_query($Sql, $this->dbConn) or die("執(zhí)行SQL語句錯(cuò)誤...".$Sql);

          }

          }



          MySQL數(shù)據(jù)庫(kù)連接MySQL基本用法
          MySQL日期數(shù)據(jù)類型使用總結(jié)MySQL的使用方法
          MySQL數(shù)據(jù)庫(kù)導(dǎo)出和導(dǎo)入的方法MySQL字符集及MySQL編碼轉(zhuǎn)換
          一些MySQL的常見問題怎樣在MySQL中直接儲(chǔ)存圖片
          安裝 MySQL與MySQL GUI ToolsMySQL實(shí)用命令
          MySQL配置文件示例MySQL集群解決方案
          MySQL使用手冊(cè)十分鐘MySQL入門教程
          關(guān)于MySql的SQL語言-MySQL入門教程PHP生成word的三種方式
          信息發(fā)布:廣州名易軟件有限公司 http://www.jetlc.com
          • 勁爆價(jià):
            不限功能
            不限用戶
            1998元/年

          • 微信客服

            <output id="r87xx"></output>
          1. 
            
            <mark id="r87xx"><thead id="r87xx"><input id="r87xx"></input></thead></mark>
              • 欧美三级片在线视频 | 日韩人妻高清 | 亚洲色网址 | 香蕉伊人综合 | 日韩三区 | 天堂aaa| www.97色 | 草榴国产在线 | AV黄色天堂 | 高清无码视频免费阅读 |