PHP漏洞全解 五 SQL注入

2022-03-12 20:36:47 字數 2188 閱讀 7184

sql注入攻擊(sqlinjection),是攻擊者在表單中提交精心構造的sql語句,改動原來的sql語句,如果web程式沒有對提交的資料經過檢查,那麼就會造成sql注入攻擊。

sql注入攻擊的一般步驟:

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

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

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

4、資料庫執行了新的sql語句,引發sql注入攻擊  

例項資料庫  

createtable`postmessage`(

`id`int(11)notnullauto_increment,

`subject`varchar(60)notnulldefault」,

`name`varchar(40)notnulldefault」,

`email`varchar(25)notnulldefault」,

`question`mediumtextnotnull,

`postdate`datetimenotnulldefault』0000-00-0000:00:00′,

primarykey(`id`)

)engine=myisamdefaultcharset=gb2312comment=』運用者的留言』auto_increment=69;

grantallprivilegesonch3.*to『sectop』@localhostidentifiedby』123456′;

插入留言

留言列表

顯示留言  

頁面可能存在注入點,我們來測試

and1=1

返回頁面  

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

12-15行

//執行mysql查詢語句

$query="select*frompostmessagewhereid=".$_get["id"];

$result=mysql_query($query)

ordie("執行ysql查詢語句失敗:".mysql_error());

引數id傳遞進來後,和前面的字串結合的sql語句放入資料庫執行查詢

提交and1=1,語句變成select*frompostmessagewhereid=71and1=1這語句前值後值都為真,and以後也為真,返回查詢到的資料

提交and1=2,語句變成select*frompostmessagewhereid=71and1=2這語句前值為真,後值為假,and以後為假,查詢不到任何資料

正常的sql查詢,經過我們構造的語句之後,形成了sql注入攻擊。通過這個注入點,我們還可以進一步拿到許可權,比如說運用union讀取管理密碼,讀取資料庫資訊,或者用mysql的load_file,intooutfile等函式進一步滲透。

防範方法

整型引數:

運用intval函式將資料轉換成整數

函式原型

intintval(mixedvar,intbase)

var是要轉換成整形的變數

base,可選,是基礎數,預設是10

浮點型引數:

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

函式原型

intfloatval(mixedvar)

var是要轉換的變數

intdoubleval(mixedvar)

var是要轉換的變數

字元型引數:

運用addslashes函式來將單引號「』」轉換成「\』」,雙引號「"」轉換成「\"」,反斜槓「\」轉換成「\\」,null字元加上反斜槓「\」

函式原型

stringaddslashes(stringstr)

str是要檢查的字串

那麼剛才出現的**漏洞,我們可以這樣修補

//執行mysql查詢語句

$query="select*frompostmessagewhereid=".intval($_get["id"]);

$result=mysql_query($query)

ordie("執行ysql查詢語句失敗:".mysql_error());  

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

if(get_magic_quotes_gpc())  

else  

再次測試,漏洞已經修補

PHP漏洞全解 五 SQL注入

sql注入攻擊 sql injection 是攻擊者在表單中提交精心構造的sql語句,改動原來的sql語句,如果web程式沒有對提交的資料經過檢查,那麼就會造成sql注入攻擊。sql注入攻擊的一般步驟 1 攻擊者訪問有sql注入漏洞的站點,尋找注入點 2 攻擊者構造注入語句,注入語句和程式中的sql...

PHP漏洞全解 五 SQL注入

本文主要介紹針對php 的sql注入攻擊。所謂的sql注入攻擊,即一部分程式設計師在編寫 的時候,沒有對使用者輸入資料的合法性進行判斷,使應用程式存在安全隱患。使用者可以提交一段資料庫查詢 根據程式返回的結果,獲得某些他想得知的資料。sql注入攻擊 sql injection 是攻擊者在表單中提交精...

PHP漏洞全解 四 SQL注入

sql注入攻擊 sql injection 是攻擊者在表單中提交精心構造的sql語句,改動原來的sql語句,如果web程式沒有對提交的資料經過檢查,那麼就會造成sql注入攻擊。1 攻擊者訪問有sql注入漏洞的站點,尋找注入點 2 攻擊者構造注入語句,注入語句和程式中的sql語句結合生成新的sql語句...