欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談開(kāi)啟magic_quote_gpc后的sql注入攻擊與防范

 更新時(shí)間:2012年01月15日 19:15:49   作者:  
通過(guò)啟用php.ini配置文件中的相關(guān)選項(xiàng),就可以將大部分想利用SQL注入漏洞的駭客拒絕于門(mén)外
通過(guò)啟用php.ini配置文件中的相關(guān)選項(xiàng),就可以將大部分想利用SQL注入漏洞的駭客拒絕于門(mén)外。
開(kāi)啟magic_quote_gpc=on之后,能實(shí)現(xiàn)addslshes()和stripslashes()這兩個(gè)函數(shù)的功能。在PHP4.0及以上的版本中,該選項(xiàng)默認(rèn)情況下是開(kāi)啟的,所以在PHP4.0及以上的版本中,就算PHP程序中的參數(shù)沒(méi)有進(jìn)行過(guò)濾,PHP系統(tǒng)也會(huì)對(duì)每一個(gè)通過(guò)GET、POST、COOKIE方式傳遞的變量自動(dòng)轉(zhuǎn)換,換句話說(shuō),輸入的注入攻擊代碼將會(huì)全部被轉(zhuǎn)換,將給攻擊者帶來(lái)非常大的困難。
雖然如此,攻擊者仍然有機(jī)會(huì)進(jìn)行SQL注入攻擊。。。。。。前提是,當(dāng)參數(shù)為數(shù)字型的時(shí)候,且未經(jīng)過(guò)Intval()函數(shù)的處理,因?yàn)榻?jīng)過(guò)intval()的處理之后,所有的數(shù)據(jù)就都會(huì)強(qiáng)制轉(zhuǎn)換成數(shù)字。
前面已經(jīng)提到過(guò),開(kāi)啟magic_quote_gpc=on之后,相當(dāng)于使用addslshes()這個(gè)函數(shù)。但是數(shù)字型沒(méi)有用到單引號(hào),所以理所當(dāng)然的繞過(guò)了addslshes()函數(shù)的轉(zhuǎn)換了。而使用MySQL自帶的char()函數(shù)或者HEX(),char()可以將參數(shù)解釋為整數(shù)并且返回這些整數(shù)的ASCII碼字符組成的字符串,使用十六進(jìn)制表示必須在數(shù)字前加上0x。
實(shí)例演示:
假設(shè)我們知道管理員的用戶名為admin,密碼不知道。并且已經(jīng)將magic_quote_gpc啟用。
SQL語(yǔ)句:$sql="select * from users where username=$name and password='$pwd'";注意:變量$name沒(méi)加引號(hào)
此時(shí),在地址欄中輸入username=admin%23,則合成后的sql語(yǔ)句為:
  select * from users where username='admin\' #' and password='';
  這時(shí)候通過(guò)url地址欄輸入的單引號(hào)(')將被加上反斜線,該sql語(yǔ)句將失效。
  admin轉(zhuǎn)換成ASCII后是char(97,100,109,105,110)
  此時(shí)在地址欄中輸入username=char(97,100,109,105,110)%23
  SQL語(yǔ)句就變成了:
  select * from users where username=char(97,100,109,105,110)#' and password='';
  執(zhí)行結(jié)果為真,就可以順利進(jìn)入后臺(tái)。
  對(duì)于數(shù)字型注入攻擊,必須在任何的數(shù)字型參數(shù)放入數(shù)據(jù)庫(kù)之前使用intval()對(duì)參數(shù)進(jìn)行強(qiáng)制轉(zhuǎn)換成數(shù)字,從而可以斷絕數(shù)字型注入漏洞的產(chǎn)生。
  比如:$id=intval($_GET[‘id']);
  select * from articles where id='$id';
  地址欄中輸入:id=5' or 1=1%23
  SQL語(yǔ)句將變成:select * from articles where id='5';
  而不是select * from articles where id='5' or 1=1#;
總結(jié):
對(duì)于每一個(gè)變量都記得加上單引號(hào),比如where username='$name',
開(kāi)啟magic_quote_gpc并不是絕對(duì)安全的,對(duì)于數(shù)字型注入攻擊,僅僅使用addslashes()函數(shù)進(jìn)行轉(zhuǎn)換是不夠的,還需使用intval()強(qiáng)制將參數(shù)轉(zhuǎn)換成數(shù)字
如何防止SQL注入攻擊
方法一:密碼比對(duì)
思路:首先通過(guò)用戶輸入的用戶名去查詢數(shù)據(jù)庫(kù),得到該用戶名在數(shù)據(jù)庫(kù)中對(duì)應(yīng)的密碼,再將從數(shù)據(jù)庫(kù)中查詢到的密碼和用戶提交過(guò)來(lái)的密碼進(jìn)行比對(duì)。
代碼:
復(fù)制代碼 代碼如下:

$sql="select password from users where username='$name'";
$res=mysql_query($sql,$conn);
if ($arr=mysql_fetch_assoc($res)){//如果用戶名存在
if ($arr['password']==$pwd) {//密碼比對(duì)
echo "登錄成功";
}else{
echo "密碼輸入有誤";
}
}else {
echo "該用戶名不存在";
}

分析:該情況下,代碼健壯了不少,即使在magic_quote_gpc=Off的情況下,也能防止SQL注入攻擊。因?yàn)楣粽呦氤晒Φ卿浀脑?,得繞過(guò)兩道坎,第一是輸入的用戶名要存在,這一步可以構(gòu)造一個(gè)SQL語(yǔ)句(‘ or 1=1%23)直接繞過(guò),但是這樣子無(wú)法通過(guò)第二道坎。因?yàn)樾枰脩糨斎胍粋€(gè)正確的密碼才能通過(guò),顯然,這已經(jīng)拒絕了SQL注入攻擊。
方法二:使用PDO的PDO::prepare()預(yù)處理操作來(lái)防止SQL注入攻擊
思路:創(chuàng)建一個(gè)pdo對(duì)象,利用pdo的預(yù)處理操作可以防止SQL注入攻擊
代碼:
復(fù)制代碼 代碼如下:

$name=$_GET['username'];
$pwd=$_GET['password'];
$sql="select * from users where username=? and password=?";
//1.創(chuàng)建一個(gè)pdo對(duì)象
$pdo=new PDO("mysql:host=localhost;port=3306;dbname=injection","root","");
//2.設(shè)置編碼
$pdo->exec("set names 'utf8'");
//3.預(yù)處理$sql語(yǔ)句
$pdoStatement=$pdo->prepare($sql);
//4.把接收到的用戶名和密碼填入
$pdoStatement->execute(array($name,$pwd));
//5.取出結(jié)果
$res=$pdoStatement->fetch();
if(empty($res)){
echo "用戶名或密碼輸入有誤";
}else{
echo "登錄成功";
}

相關(guān)文章

  • phpmyadmin 4+ 訪問(wèn)慢的解決方法

    phpmyadmin 4+ 訪問(wèn)慢的解決方法

    很多人用了phpmyadmin4以后的版本發(fā)現(xiàn)速度好像慢了很多,總結(jié)下,提供解決方法。
    2013-11-11
  • Mybatis mapper動(dòng)態(tài)代理的原理解析

    Mybatis mapper動(dòng)態(tài)代理的原理解析

    這篇文章主要介紹了Mybatis mapper動(dòng)態(tài)代理的原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • MySQL v5.7.18 解壓版本安裝詳細(xì)教程

    MySQL v5.7.18 解壓版本安裝詳細(xì)教程

    這篇文章主要介紹了MySQL v5.7.18 解壓版本安裝詳細(xì)教程,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-04-04
  • Mysql 模糊查詢和正則表達(dá)式實(shí)例詳解

    Mysql 模糊查詢和正則表達(dá)式實(shí)例詳解

    在MySQL中,可以使用LIKE運(yùn)算符進(jìn)行模糊查詢,LIKE運(yùn)算符用于匹配字符串模式,其中可以使用通配符來(lái)表示任意字符或字符序列,這篇文章主要介紹了Mysql 模糊查詢和正則表達(dá)式實(shí)例詳解,需要的朋友可以參考下
    2023-11-11
  • mysql 8.0.18.zip安裝配置方法圖文教程(windows 64位)

    mysql 8.0.18.zip安裝配置方法圖文教程(windows 64位)

    這篇文章主要為大家詳細(xì)介紹了mysql 8.0.18.zip安裝配置方法圖文教程,以及卸載以前數(shù)據(jù)庫(kù)的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • MySQL 壓縮的使用場(chǎng)景和解決方案

    MySQL 壓縮的使用場(chǎng)景和解決方案

    數(shù)據(jù)分布特點(diǎn),決定了空間壓縮的效率,如果存入的數(shù)據(jù)的重復(fù)率較高,其壓縮率就會(huì)較高;通常情況下字符類(lèi)型數(shù)據(jù)(CHAR, VARCHAR, TEXT or BLOB )具有較高的壓縮率,而一些二進(jìn)制數(shù)據(jù)或者一些已經(jīng)壓縮過(guò)的數(shù)據(jù)的壓縮率不會(huì)很好
    2017-06-06
  • MySql中取前幾行數(shù)據(jù)使用limit來(lái)完成

    MySql中取前幾行數(shù)據(jù)使用limit來(lái)完成

    在mysql中是沒(méi)有top關(guān)鍵字的,不過(guò)可以用limit來(lái)完成此功能,下面舉例為大家詳細(xì)介紹下它的使用方法,不會(huì)的朋友可以學(xué)習(xí)下
    2013-07-07
  • 以Centos為例講解MySQL在Linux中的部署

    以Centos為例講解MySQL在Linux中的部署

    這篇文章主要介紹了以Centos為例講解MySQL在Linux中的部署,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • mysql安裝配置方法圖文教程(CentOS7)

    mysql安裝配置方法圖文教程(CentOS7)

    這篇文章主要為大家詳細(xì)介紹了centos7下mysql安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Mysql Limit 分頁(yè)查詢優(yōu)化詳解

    Mysql Limit 分頁(yè)查詢優(yōu)化詳解

    這篇文章主要介紹了Mysql Limit 分頁(yè)查詢優(yōu)化的相關(guān)資料,非常不錯(cuò),介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-09-09

最新評(píng)論