一级女人毛片人一女人-一级女性大黄生活片免费-一级女性全黄久久生活片-一级女性全黄生活片免费-国产美女在线一区二区三区-国产美女在线观看

始創于2000年 股票代碼:831685
咨詢熱線:0371-60135900 注冊有禮 登錄
  • 掛牌上市企業
  • 60秒人工響應
  • 99.99%連通率
  • 7*24h人工
  • 故障100倍補償
您的位置: 網站首頁 > 幫助中心>文章內容

PHP漏洞全解-SQL注入攻擊

發布時間:  2012/5/18 18:56:01

SQL注入攻擊(SQL Injection),是攻擊者在表單中提交精心構造的sql語句,改動原來的sql語句,如果web程序沒有對提交的數據經過檢查,那么就會造成sql注入攻擊。

SQL注入攻擊的一般步驟:

1、攻擊者訪問有SQL注入漏洞的站點,尋找注入點

2、攻擊者構造注入語句,注入語句和程序中的SQL語句結合生成新的sql語句

3、新的sql語句被提交到數據庫中執行 處理

4、數據庫執行了新的SQL語句,引發SQL注入攻擊

實例

數據庫

 

  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=’運用者的留言’ AUTO_INCREMENT=69 ;  
  10. grant all privileges on ch3.* to ‘sectop’@localhost identified by ’123456′;  
  11. //add.php 插入留言  
  12. //list.php 留言列表  
  13. //show.php 顯示留言  

頁面 http://www.netsos.com.cn/show.php?id=71 可能存在注入點,我們來測試

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

返回頁面

 

一次查詢到記錄,一次沒有,我們來看看源碼

//show.php 12-15行

// 執行mysql查詢語句

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

$result = mysql_query($query)

or die("執行ySQL查詢語句失敗:" . mysql_error());

參數id傳遞進來后,和前面的字符串結合的sql語句放入數據庫執行 查詢

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

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

正常的SQL查詢,經過我們構造的語句之后,形成了SQL注入攻擊。通過這個注入點,我們還可以進一步拿到權限,比如說運用 union讀取管理密碼,讀取數據庫信息,或者用mysql的load_file,into outfile等函數進一步滲透。

防范方法

整型參數:

運用 intval函數將數據轉換成整數

函數原型

int intval(mixed var, int base)

var是要轉換成整形的變量

base,可選,是基礎數,默認是10

浮點型參數:

運用 floatval或doubleval函數分別轉換單精度和雙精度浮點型參數

函數原型

int floatval(mixed var)

var是要轉換的變量

  int doubleval(mixed var)

var是要轉換的變量

字符型參數:

運用 addslashes函數來將單引號“’”轉換成“\’”,雙引號“"”轉換成“\"”,反斜杠“\”轉換成“\\”,NULL字符加上反斜杠“\”

函數原型

string addslashes (string str)

str是要檢查的字符串

那么剛才出現的代碼漏洞,我們可以這樣修補

// 執行mysql查詢語句

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

$result = mysql_query($query)

or die("執行ySQL查詢語句失敗:" . mysql_error());

 

如果是字符型,先判斷magic_quotes_gpc能無法 為On,當不為On的時候運用 addslashes轉義特殊字符

 

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

 

再次測試,漏洞已經修補


本文出自:億恩科技【www.laynepeng.cn】

服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]

  • 您可能在找
  • 億恩北京公司:
  • 經營性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經營性ICP/ISP/IDC證:豫B1.B2-20060070
  • 億恩南昌公司:
  • 經營性ICP/ISP證:贛B2-20080012
  • 服務器/云主機 24小時售后服務電話:0371-60135900
  • 虛擬主機/智能建站 24小時售后服務電話:0371-60135900
  • 專注服務器托管17年
    掃掃關注-微信公眾號
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權所有  地址:鄭州市高新區翠竹街1號總部企業基地億恩大廈  法律顧問:河南亞太人律師事務所郝建鋒、杜慧月律師   京公網安備41019702002023號
      1
     
     
     
     

    0371-60135900
    7*24小時客服服務熱線