琼海扯僖物流有限公司

【全國】 集團簡介 關(guān)注我們
幫學(xué)院 商標(biāo)分類表-2024尼斯分類 知識產(chǎn)權(quán)交易

快幫集團

php建設(shè)網(wǎng)站應(yīng)注意的問題

2019-03-22

把握整站的結(jié)構(gòu),避免泄露站點敏感目錄,使用預(yù)編譯語句,避免sql注入,預(yù)防XSS代碼,如果不需要使用cookie就不使用。

 

限制用戶權(quán)限,預(yù)防CSRF,嚴(yán)格控制上傳文件類型,加密混淆javascript代碼,提高攻擊門檻,使用更高級的hash算法保存數(shù)據(jù)庫中重要信息。

 

//幾個有用的php字符串處理函數(shù)

 

1

 

//防止sql注入

 

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


注意初始化你的變量

 

2.防止SQL Injection (sql注射)

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

PHP:

 

1

 

調(diào)用方法PHP:

 

1

 

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

 

注意!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ù)庫連接,因此,在調(diào)用mysql_real_escape_string 之前,必須連接上MySQL 數(shù)據(jù)庫。

 

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

 

PHP:

 

1

 

調(diào)用方法:PHP:

 

1

 

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

 

//關(guān)于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;}

 

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

 

mysql_select_db($this->dbName);$this->IsOp=true;}//關(guān)閉數(shù)據(jù)庫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");//設(shè)置為不自動提交,因為MYSQL默認(rèn)立即執(zhí)行mysql_query("BEGIN");//開始事務(wù)定義for($i=0;$idbConn)){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語句錯誤...".$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);}

 

}


TAG標(biāo)簽耗時:0.0053467750549316 秒

文章內(nèi)容來源于網(wǎng)絡(luò),侵刪

常見問題

京公網(wǎng)安備 11010802036823號

   

京ICP備16051929號

   

增值電信業(yè)務(wù)許可證編號:京B2-20190686

   

專利代理機構(gòu)代碼:16087

   

人力資源服務(wù)許可證編號:1101082019043

   

代理記賬許可證書編號:DLJZ11010820210015

0
陕西省| 大荔县| 武威市| 托里县| 左贡县| 民权县| 灯塔市| 普格县| 梁山县| 建昌县| 钟山县| 延边| 汕尾市| 温宿县| 科技| 高尔夫| 上虞市| 会东县| 红原县| 昭通市| 广南县| 定州市| 黄陵县| 定日县| 梁河县| 新丰县| 济源市| 德州市| 灌南县| 南和县| 都匀市| 陈巴尔虎旗| 杨浦区| 铜川市| 马鞍山市| 甘肃省| 上高县| 酒泉市| 兰溪市| 珲春市| 射阳县|