99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

App下載
話題 首頁 > PHP 教程 > PHP 教程話題列表 > 詳情

php在編程的時候,要注意哪些安全問題?

精華
路飛 2015-11-28 07:11:58 瀏覽(7531) 回復(7) 贊(0)
有哪些安全問題需要注意?
php

回答(7)

珍珍阿姨 2015-12-15

//幾個有用的php字符串處理函數

1

//防止sql注入

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

  1. 注意初始化你的變量

2.防止SQL Injection (sql注射)

   我們知道Web上提交數據有兩種方式,一種是get、一種是post,那么很多常見的sql注射就是從get方式入手的,而且注射的語句里面一定是包含一些sql語句的,因為沒有sql語句,那么如何進行,sql語句有四大句:select 、update、delete、insert,那么我們如果在我們提交的數據中進行過濾是不是能夠避免這些問題呢?


   于是我們使用正則就構建如下函數:```


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


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


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


(4)對編輯內容進行過濾和轉換


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


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


由于mysql_real_escape_string 需要MySQL 數據庫連接,因此,在調用mysql_real_escape_string 之前,必須連接上MySQL 數據庫。


PHP:


1 


調用方法PHP:


1 


經過清潔的數據可以直接插入數據庫。


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


mysql_real_escape_string 考慮到連接的當前字符集,而mysql_escape_string 不考慮。


由于mysql_real_escape_string 需要MySQL 數據庫連接,因此,在調用mysql_real_escape_string 之前,必須連接上MySQL 數據庫。


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


PHP:


1 


調用方法:PHP:


1 


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


//關于sql注入


//用戶發(fā)布的html,過濾危險代碼function uh($str){$farr = array("/s+/", //過濾多余的空白"/]*?)>/isU", //過濾dbHost = $Host;$this->dbUID = $UID;$this->dbPWD = $Pwd;$this->dbName = $Name;$this->dbEncode = $Encode;$this->IsOp=false;}

//打開數據庫 Open() { if (!$this->dbConn) { @$this->dbConn = mysql_connect($this->dbHost, $this->dbUID, $this->dbPWD) or die("數據庫連接錯誤!..."); } mysql_query("SET NAMES '" . $this->dbEncode . "'");```

mysql_select_db($this->dbName);$this->IsOp=true;}//關閉數據庫Close(){if ($this->dbConn&&$this->IsOp){mysql_close($this->dbConn);$this->IsOp=false;}}htmlrsp($str){$str=str_replace("",$str);return $str;}//過濾XSS危險腳本RemoveXSS($val) {
if(strpos($val,"$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,"/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語句錯誤...".$sql);}HGexecute($SqlArr){mysql_query("SET AUTOCOMMIT=0");//設置為不自動提交,因為MYSQL默認立即執(zhí)行mysql_query("BEGIN");//開始事務定義for($i=0;$idbConn)){mysql_query("ROLLBACK");//判斷執(zhí)行失敗回滾mysql_query("SET AUTOCOMMIT=1");return false;}


}
mysql_query("SET AUTOCOMMIT=1");
   mysql_query("COMMIT");//執(zhí)行事務
return true;```


}


//取SQL數據GetData($sql){$result = mysql_query($sql, $this->dbConn) or die("查詢SQL語句錯誤...".$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"||gettype($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語句錯誤...".$Sql);if($IsId)return mysql_insert_id($this->dbConn);elsereturn 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"||gettype($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語句錯誤...".$Sql);}Del($Tb,$Id){$Id=intval($Id);$Sql="delete from ".$Tb." where id=".$Id;mysql_query($Sql, $this->dbConn) or die("執(zhí)行SQL語句錯誤...".$Sql);}


}
865460609 2017-03-01

所有表單,所有接收數據,傳遞數據的地方,都存在安全問題,都需要過濾和驗證,

還要sql注入,

圖片盜鏈,

等等

PHP群157531900 2018-01-09

把握整站的結構,避免泄露站點敏感目錄

使用預編譯語句,避免sql注入

預防XSS代碼,如果不需要使用cookie就不使用

限制用戶權限,預防CSRF

嚴格控制上傳文件類型

加密混淆javascript代碼,提高攻擊門檻

使用更高級的hash算法保存數據庫中重要信息

Silence廣 2018-01-20

一樓粘貼那么多代碼累嗎?

注意初始化你的變量

一筆荒蕪 2018-05-31

快來解決啦!快來!快來! 快來 快來

1144100656 2018-05-31

剛學習程序,過來學習學習!!!!...

1152696398 2018-05-31

我也不清楚,坐等大神,火鉗劉明!??!

要回復,請先登錄 或者注冊