php xfocus防注入資料

2021-07-23 14:40:37 字數 3272 閱讀 4830

先來說說安全問題,我們首先看一下兩篇文章:

上面文章是安全焦點上的關於php安全的文章,基本上比較全面的介紹了關於php的一些安全問題。

在php編碼的時候,如果考慮到一些比較基本的安全問題,首先一點:
1. 初始化你的變數

為什麼這麼說呢?我們看下面的**:
if ($admin)

else

好,我們看上面的**好像是能正常執行,沒有問題,那麼加入我提交乙個非法的引數過去呢,那麼效果會如何呢?比如我們的這個頁是 那麼我們提交:呵呵,你想一些,我們是不是直接就是管理員了,直接進行管理。

當然,可能我們不會犯這麼簡單錯的錯誤,那麼一些很隱秘的錯誤也可能導致這個問題,比如最近暴出來的phpwind 1.3.6論壇有個漏洞,導致能夠直接拿到管理員許可權,就是因為有個$skin變數沒有初始化,導致了後面一系列問題。

那麼我們如何避免上面的問題呢?首先,從php.ini入手,把php.ini裡面的register_global = off,就是不是所有的註冊變數為全域性,那麼就能避免了。但是,我們不是伺服器管理員,只能從**上改進了,那麼我們如何改進上面的**呢?我們改寫如 下:

ad

min=

0;//

初始化變

量if(

_post['admin_user'] &&

_post[『admin_pass』])  

else

if ($admin)

else

那麼這時候你再提交  就不好使了,因為我們在一開始就把變數初始化為 $admin = 0 了,那麼你就無法通過這個漏洞獲取管理員許可權。
防止sql injection (sql注射)

sql 注射應該是目前程式危害最大的了,包括最早從asp到php,基本上都是國內這兩年流行的技術,基本原理就是通過對提交變數的不過濾形成注入點然後使惡意使用者能夠提交一些sql查詢語句,導致重要資料被竊取、資料丟失或者損壞,或者被入侵到後台管理。

基本原理我就不說了,我們看看下面兩篇文章就很明白了:

那麼我們既然了解了基本的注射入侵的方式,那麼我們如何去防範呢?這個就應該我們從**去入手了。

我們知道web上提交資料有兩種方式,一種是get、一種是post,那麼很多常見的sql注射就是從get方式入手的,而且注射的語句裡面一定是包含一些sql語句的,因為沒有sql語句,那麼如何進行,sql語句有四大句:

select 、update、delete、insert,那麼我們如果在我們提交的資料中進行過濾是不是能夠避免這些問題呢?

於是我們使用正則就構建如下函式:

/* 函式名稱:inject_check()

函式作用:檢測提交的值是不是含有sql注射的字元,防止注射,保護伺服器安全

參 數:sq

lstr

:提交的

變數返回

值:返回

檢測結果

,tur

eorf

alse

函式作者

:hei

yelu

ren∗

/fun

ctio

ninj

ectc

heck

( sql_str)

我們函式裡把 select,insert,update,delete, union, into, load_file, outfile /*, ./ , ../ , ' 等等危險的引數字串全部過濾掉,那麼就能夠控制提交的引數了,程式可以這麼構建:
if (inject_check(

_get[『id』]))  

else  

// 注射判斷

elseif (!is_numeric(id

))ex

it(『

提交的參

數非法!

′);/

/數字判

斷 id = intval($id); // 整型化

return $id;

}

呵呵,那麼我們就能夠進行校驗了,於是我們上面的程式**就變成了下面的:
if (inject_check(

_get[『id』]))  

else  

?>

好,問題到這裡似乎都解決了,但是我們有沒有考慮過post提交的資料,大批量的資料呢?

比如一些字元可能會對資料庫造成危害,比如 ' _ ', ' % ',這些字元都有特殊意義,那麼我們如果進行控制呢?還有一點,就是當我們的php.ini裡面的magic_quotes_gpc = off 的時候,那麼提交的不符合資料庫規則的資料都是不會自動在前面加' '的,那麼我們要控制這些問題,於是構建如下函式:

/*

函式名稱:str_check()

函式作用:對提交的字串進行過濾

參 數:va

r:要處

理的字元

串返回值

:返回過

濾後的字

符串函式

作者:h

eiye

lure

n∗/f

unct

ions

trch

eck(

str ) s

tr=s

trre

plac

e("′′

,"′′,

str); // 把 『_』過濾掉 st

r=st

rrep

lace

("str); // 把』 % 『過濾掉

return $str;

}ok,我們又一次的避免了伺服器被淪陷的危險。 p

ost:

要提交的

內容返回

值:post = addslashes(

post);    // 進行magic_quotes_gpc沒有開啟的情況對提交資料的過濾  

}post = str_replace("_", "_",

post);    // 把 『_』過濾掉

post = str_replace("%", "%", po

st);

//把′

post = nl2br(po

st);

//回車

轉換post= htmlspecialchars($post); // html標記轉換

return $post;

}最後在告訴你上面表達的:1. 初始化你的變數 2. 一定記得要過濾你的變數

防SQL注入

這段 有好處也有壞處,用的時候得小心,搞不好就會跳進錯誤 dimsql injdata sql injdata and exec insert select delete update chr mid master truncate char declare sql inj split sql in...

防SQL注入

1.必須認定使用者輸入的資料都是不安全的 使用者輸入的資料進行過濾處理 if preg match w get username matches else 讓我們看下在沒有過濾特殊字元時,出現的sql情況 設定 name 中插入了我們不需要的sql語句 name qadir delete from ...

防SQL注入

與資料庫互動的 web 應用程式中最嚴重的風險之一 sql 注入攻擊。sql 注入是應用程式開發人員未預期的把 sql 傳入到應用程式的過程,它由於應用程式的糟糕設計而使攻擊成為可能,並且只有那些直接使用使用者提供的值構建 sql 語句的應用程式才會受影響。sql 語句通過字串的構造技術動態建立,文...