国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > 建站經驗 > 正文

php 防止SQL注入的幾種方法

2024-04-25 20:35:45
字體:
來源:轉載
供稿:網友

SQL注入是可以通過一些sql語法上的處理不當導致數據庫或網站權限給你拿到了,今天小編整理了一些常用的php mysql中的SQL注入防范方法吧.

使用php5.3或以上的版本我們可以直接使用PDO與mysqli處理數據

1.使用PDO(PHP Data Objects),代碼如下:

$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name');

$stmt->execute(array(':name' => $name));

foreach ($stmt as $row) {

// do something with $row

}

2.使用mysqli,代碼如下:

$stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?');

$stmt->bind_param('s', $name);

$stmt->execute();

$result = $stmt->get_result();

while ($row = $result->fetch_assoc()) {

// do something with $row

}

3.如果是php5.3以下版本我們可以使用ADDSLASHES和MYSQL_REAL_ESCAPE_STRING這些函數來處理,代碼如下:

function get_str($string)

{

if (!get_magic_quotes_gpc())

{

return addslashes($string);

}

return $string;

}

國內很多PHP coder仍在依靠addslashes防止SQL注入(包括我在內),我還是建議大家加強中文防止SQL注入的檢查,addslashes的問題在于可以用0xbf27來代替單引號,而addslashes只是將0xbf27修改為0xbf5c27,成為一個有效的多字節字符,其中的0xbf5c仍會被看作是單引號,所以addslashes無法成功攔截.

當然addslashes也不是毫無用處,它是用于單字節字符串的處理,多字節字符還是用mysql_real_escape_string吧.

最好對magic_quotes_gpc已經開放的情況下,還是對$_POST[‘lastname’]進行檢查一下.

再說下mysql_real_escape_string和mysql_escape_string這2個函數的區別:

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

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

如果是字符型就用addslashes()過濾一下,然后再過濾”%”和”_”,代碼如下:

$search=addslashes($search);

$search=str_replace(“_”,”\_”,$search);

$search=str_replace(“%”,”\%”,$search);

當然也可以加php通用防注入代碼:

/*************************

PHP通用防注入安全代碼

說明:

判斷傳遞的變量中是否含有非法字符

如$_POST、$_GET

功能:

防注入

**************************/

//要過濾的非法字符

$ArrFiltrate=array(”‘”,”;”,”union”);

//出錯后要跳轉的url,不填則默認前一頁

$StrGoUrl=”";

//是否存在數組中的值

function FunStringExist($StrFiltrate,$ArrFiltrate){

foreach ($ArrFiltrate as $key=>$value){

if (eregi($value,$StrFiltrate)){

return true;

}

}

return false;

}

//合并$_POST 和 $_GET

if(function_exists(array_merge)){

$ArrPostAndGet=array_merge($HTTP_POST_VARS,$HTTP_GET_VARS);

}else{

foreach($HTTP_POST_VARS as $key=>$value){
$ArrPostAndGet[]=$value;

}

foreach($HTTP_GET_VARS as $key=>$value){
$ArrPostAndGet[]=$value;

}

}

//驗證開始

foreach($ArrPostAndGet as $key=>$value){

if (FunStringExist($value,$ArrFiltrate)){

echo “alert(/”Neeao提示,非法字符/”);”;

if (emptyempty($StrGoUrl)){

echo “history.go(-1);”;

}else{

echo “window.location=/”".$StrGoUrl.”/”;”;

}

exit;

}

}

保存為checkpostandget.php

然后在每個php文件前加include(“checkpostandget.php“);即可

總結一下:

addslashes() 是強行加.

mysql_real_escape_string() 會判斷字符集,但是對PHP版本有要求.

mysql_escape_string不考慮連接的當前字符集.

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 会同县| 嘉鱼县| 渭南市| 台中县| 临湘市| 余江县| 石家庄市| 托里县| 华亭县| 汉寿县| 紫阳县| 鸡西市| 邛崃市| 新乐市| 饶河县| 江山市| 集安市| 黄骅市| 天峻县| 阿拉尔市| 肇庆市| 鄄城县| 金塔县| 湖南省| 东丰县| 祥云县| 昔阳县| 波密县| 靖宇县| 汤原县| 海林市| 龙岩市| 荆州市| 保靖县| 青岛市| 潜山县| 民丰县| 瓦房店市| 罗甸县| 包头市| 右玉县|