偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

PHP漏洞全解(五)-SQL注入攻擊

系統(tǒng) Linux
本文主要介紹針對(duì)PHP網(wǎng)站的SQL注入攻擊。所謂的SQL注入攻擊,即一部分程序員在編寫代碼的時(shí)候,沒(méi)有對(duì)用戶輸入數(shù)據(jù)的合法性進(jìn)行判斷,使應(yīng)用程序存在安全隱患。用戶可以提交一段數(shù)據(jù)庫(kù)查詢代碼,根據(jù)程序返回的結(jié)果,獲得某些他想得知的數(shù)據(jù)。

SQL注入攻擊(SQL Injection),是攻擊者在表單中提交精心構(gòu)造的sql語(yǔ)句,改動(dòng)原來(lái)的sql語(yǔ)句,如果web程序沒(méi)有對(duì)提交的數(shù)據(jù)經(jīng)過(guò)檢查,那么就會(huì)造成sql注入攻擊。

  SQL注入攻擊的一般步驟:

  1、攻擊者訪問(wèn)有SQL注入漏洞的站點(diǎn),尋找注入點(diǎn)

  2、攻擊者構(gòu)造注入語(yǔ)句,注入語(yǔ)句和程序中的SQL語(yǔ)句結(jié)合生成新的sql語(yǔ)句

  3、新的sql語(yǔ)句被提交到數(shù)據(jù)庫(kù)中執(zhí)行 處理

  4、數(shù)據(jù)庫(kù)執(zhí)行了新的SQL語(yǔ)句,引發(fā)SQL注入攻擊

實(shí)例

  數(shù)據(jù)庫(kù)

 

  1. CREATE TABLE `postmessage` (  
  2.   `id` int(11) NOT NULL auto_increment,  
  3.   `subject` varchar(60) NOT NULL default ”,  
  4.   `namevarchar(40) NOT NULL default ”,  
  5.   `email` varchar(25) NOT NULL default ”,  
  6.   `question` mediumtext NOT NULL,  
  7.   `postdate` datetime NOT NULL default ’0000-00-00 00:00:00′,  
  8.   PRIMARY KEY (`id`)  
  9.   ) ENGINE=MyISAM DEFAULT CHARSET=gb2312 COMMENT=’運(yùn)用者的留言’ AUTO_INCREMENT=69 ;  
  10.   grant all privileges on ch3.* to ‘sectop’@localhost identified by ’123456′;  
  11.   //add.php 插入留言  
  12.   //list.php 留言列表  
  13.   //show.php 顯示留言  

    頁(yè)面 http://www.netsos.com.cn/show.php?id=71 可能存在注入點(diǎn),我們來(lái)測(cè)試

  http://www.netsos.com.cn/show.php?id=71 and 1=1

  返回頁(yè)面

 

  一次查詢到記錄,一次沒(méi)有,我們來(lái)看看源碼

  //show.php 12-15行

  // 執(zhí)行mysql查詢語(yǔ)句

  $query = "select * from postmessage where id = ".$_GET["id"];

  $result = mysql_query($query)

  or die("執(zhí)行ySQL查詢語(yǔ)句失?。? . mysql_error());

  參數(shù)id傳遞進(jìn)來(lái)后,和前面的字符串結(jié)合的sql語(yǔ)句放入數(shù)據(jù)庫(kù)執(zhí)行 查詢

  提交 and 1=1,語(yǔ)句變成select * from postmessage where id = 71 and 1=1 這語(yǔ)句前值后值都為真,and以后也為真,返回查詢到的數(shù)據(jù)

  提交 and 1=2,語(yǔ)句變成select * from postmessage where id = 71 and 1=2 這語(yǔ)句前值為真,后值為假,and以后為假,查詢不到任何數(shù)據(jù)

  正常的SQL查詢,經(jīng)過(guò)我們構(gòu)造的語(yǔ)句之后,形成了SQL注入攻擊。通過(guò)這個(gè)注入點(diǎn),我們還可以進(jìn)一步拿到權(quán)限,比如說(shuō)運(yùn)用 union讀取管理密碼,讀取數(shù)據(jù)庫(kù)信息,或者用mysql的load_file,into outfile等函數(shù)進(jìn)一步滲透。

防范方法

  整型參數(shù):

  運(yùn)用 intval函數(shù)將數(shù)據(jù)轉(zhuǎn)換成整數(shù)

  函數(shù)原型

  int intval(mixed var, int base)

   var是要轉(zhuǎn)換成整形的變量

   base,可選,是基礎(chǔ)數(shù),默認(rèn)是10

  浮點(diǎn)型參數(shù):

  運(yùn)用 floatval或doubleval函數(shù)分別轉(zhuǎn)換單精度和雙精度浮點(diǎn)型參數(shù)

  函數(shù)原型

  int floatval(mixed var)

   var是要轉(zhuǎn)換的變量

  int doubleval(mixed var)

   var是要轉(zhuǎn)換的變量

  字符型參數(shù):

  運(yùn)用 addslashes函數(shù)來(lái)將單引號(hào)“’”轉(zhuǎn)換成“\’”,雙引號(hào)“"”轉(zhuǎn)換成“\"”,反斜杠“\”轉(zhuǎn)換成“\\”,NULL字符加上反斜杠“\”

  函數(shù)原型

  string addslashes (string str)

   str是要檢查的字符串

  那么剛才出現(xiàn)的代碼漏洞,我們可以這樣修補(bǔ)

  // 執(zhí)行mysql查詢語(yǔ)句

  $query = "select * from postmessage where id = ".intval($_GET["id"]);

  $result = mysql_query($query)

or die("執(zhí)行ySQL查詢語(yǔ)句失?。? . mysql_error());

 

  如果是字符型,先判斷magic_quotes_gpc能無(wú)法 為On,當(dāng)不為On的時(shí)候運(yùn)用 addslashes轉(zhuǎn)義特殊字符

 

  1. if(get_magic_quotes_gpc())  
  2. {  
  3.     $var = $_GET["var"];  
  4. }  
  5.  else  
  6.  {  
  7.   $var = addslashes($_GET["var"]);  

 

  再次測(cè)試,漏洞已經(jīng)修補(bǔ)

責(zé)任編輯:xikder 來(lái)源: DoDo's Blog
相關(guān)推薦

2012-04-12 13:36:59

2012-04-12 14:45:13

2012-04-12 16:05:50

2012-12-19 10:36:06

2012-04-12 15:42:35

2010-09-14 16:00:16

2012-04-12 15:59:09

2012-04-12 15:27:44

2012-04-12 11:28:04

2013-04-26 11:26:00

2013-12-13 10:45:26

2019-09-17 10:06:46

數(shù)據(jù)庫(kù)程序員網(wǎng)絡(luò)安全

2015-02-04 14:50:29

2014-02-28 17:29:06

2011-10-19 10:47:56

2015-12-29 10:41:16

2020-08-07 08:13:08

SQL攻擊模式

2014-11-04 13:43:10

2019-02-22 09:00:00

2009-02-04 16:51:48

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)