PHP數(shù)據(jù)過濾函數(shù)_第1頁
PHP數(shù)據(jù)過濾函數(shù)_第2頁
PHP數(shù)據(jù)過濾函數(shù)_第3頁
PHP數(shù)據(jù)過濾函數(shù)_第4頁
PHP數(shù)據(jù)過濾函數(shù)_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

本文格式為Word版,下載可任意編輯——PHP數(shù)據(jù)過濾函數(shù)PHP數(shù)據(jù)過濾函數(shù)

固執(zhí)并不只是在大是大非中不屈服,而也是在挫折前不變更自己。以下是我為大家探尋整理的PHP數(shù)據(jù)過濾函數(shù),夢想能給大家?guī)矸鲋?更多精彩內(nèi)容請實時關(guān)注我們我!

1、php提交數(shù)據(jù)過濾的根本原那么

1提交變量進數(shù)據(jù)庫時,我們務(wù)必使用addslashes舉行過濾,像我們的注入問題,一個addslashes也就搞定了。其實在涉及到變量取值時,intval函數(shù)對字符串的過濾也是個不錯的選擇。

2在php.ini中開啟magic_quotes_gpc和magic_quotes_runtime。magic_quotes_gpc可以把get,post,cookie里的引號變?yōu)樾备?。magic_quotes_runtime對于進出數(shù)據(jù)庫的數(shù)據(jù)可以起到格式話的作用。其實,早在以前注入很瘋狂時,這個參數(shù)就很流行了。

3在使用系統(tǒng)函數(shù)時,務(wù)必使用escapeshellarg,escapeshellcmd參數(shù)去過濾,這樣你也就可以放心的使用系統(tǒng)函數(shù)。

4對于跨站,strip_tags,htmlspecialchars兩個參數(shù)都不錯,對于用戶提交的的帶有html和php的標記都將舉行轉(zhuǎn)換。譬如尖括號就將轉(zhuǎn)化為這樣無害的字符。

代碼如下$new=htmlspecialcharsahref=testTest/a,ENT_QUOTES;

strip_tags$text,;5對于相關(guān)函數(shù)的過濾,就像從前的include,unlink,fopen等等,只要你把你所要執(zhí)行操作的變量指定好或者對相關(guān)字符過濾嚴密,我想這樣也就無懈可擊了。

2、PHP簡樸的數(shù)據(jù)過濾

1入庫:trim$str,addslashes$str

2出庫:stripslashes$str

3顯示:htmlspecialcharsnl2br$str

看下面的例子以便進一步議論dispatch.php腳本:

代碼如下?php

/*全局安好處理*/

switch$_GET[task]

caseprint_form:

include/inc/presentation/form.inc;

break;

caseprocess_form:

$form_valid=false;

include/inc/logic/process.inc;

if$form_valid

include/inc/presentation/end.inc;

else

include/inc/presentation/form.inc;

break;

default:

include/inc/presentation/index.inc;

break;

?

假設(shè)這是唯一的可公開訪問到的PHP腳本,那么可以確信的一點是這個程序的設(shè)計可以確保在最開頭的全局安好處理無法被繞過。同時也讓開發(fā)者輕易看到特定任務(wù)的操縱流程。例如,不需要欣賞整個代碼就可以輕易的知道:當(dāng)$form_valid為true時,end.inc是唯一顯示給用戶的;由于它在process.inc被包含之前,并剛剛初始化為false,可以確定的是process.inc的內(nèi)部規(guī)律會將設(shè)置它為true;否那么表單將再次顯示可能會顯示相關(guān)的錯誤信息。

留神

假設(shè)你使用目次定向文件,如index.php代替dispatch.php,你可以像這樣使用URL地址:/?task=print_form。

你還可以使用ApacheForceType重定向或者mod_rewrite來調(diào)整URL地址:/app/print-form。

包含方法

另外一種方式是使用單獨一個模塊,這個模塊負責(zé)全體的安好處理。這個模塊被包含在全體公開的PHP腳本的最前端或者分外靠前的片面。參考下面的腳本security.inc

代碼如下?php

switch$_POST[form]

caselogin:

$allowed=array;

$allowed[]=form;

$allowed[]=username;

$allowed[]=password;

$sent=array_keys$_POST;

if$allowed==$sent

include/inc/logic/process.inc;

break;

?

在本例中,每個提交過來的表單都認為應(yīng)當(dāng)含有form這個唯一驗證值,并且security.inc獨立處理表單中0需要過濾的數(shù)據(jù)。實現(xiàn)這個要求的'HTML表單如下所示:

代碼如下formaction=/receive.phpmethod=POST

inputtype=hiddenname=formvalue=login/

pUsername:

inputtype=textname=username//p

pPassword:

inputtype=passwordname=password//p

inputtype=submit/

/form叫做$allowed的數(shù)組用來檢驗?zāi)膫€表單變量是允許的,這個列表在表單被處理前應(yīng)當(dāng)是一致的。流程操縱抉擇要執(zhí)行什么,而process.inc是真正過濾后的數(shù)據(jù)到達的地方。

留神

確保security.inc總是被包含在每個腳本的最開頭的位置對比好的方法是使用auto_prepend_file設(shè)置。

過濾的例子

建立白名單對于數(shù)據(jù)過濾是分外重要的。由于不成能對每一種可能遇到的表單數(shù)據(jù)都給出例子,片面例子可以扶助你對此有一個大體的了解。

下面的代碼對郵件地址舉行了驗證:

代碼如下?php

$clean=array;

$email_pattern=/^[^@s]+@[-a-z0-9]+.+[a-z]2,$/i;

ifpreg_match$email_pattern,$_POST[email]

$clean[email]=$_POST[email];

?

下面的代碼確保了$_POST[color]的內(nèi)容是red,green,或者blue:

代碼如下?php

$clean=array;

switch$_POST[color]

casered:

casegreen:

caseblue:

$clean[color]=$_POST[color];

break;

?

下面的代碼確保$_POST[num]是一個整數(shù)integer:

代碼如下?php

$clean=array;

if$_POST[num]==strvalintval$_POST[num]

$clean[num]=$_POST[num];

?

下面的代碼確保$_POST[num]是一個浮點數(shù)float:

代碼如下?php

$clean=array;

if$_POST[num]==strvalfloatval$_POST[num]

$clean[num]=$_POST[num];

?

名字轉(zhuǎn)換

之前每個例子都使用了數(shù)組$clean。對于開發(fā)人員判斷數(shù)據(jù)是否有潛在的要挾這是一個很好的習(xí)慣。永遠不要在對數(shù)據(jù)驗證后還將其保存在$_POST或者$_GET中,作為開發(fā)人員對超級全局數(shù)組中保存的數(shù)據(jù)總是應(yīng)當(dāng)保持充分的質(zhì)疑。

需要補充的是,使用$clean可以扶助斟酌還有什么沒有被過濾,這更類似一個白名單的作用。可以提升安好的等級。

假設(shè)僅僅將驗證過的數(shù)據(jù)保存在$clean,在數(shù)據(jù)驗證上僅存的風(fēng)險是你所引用的數(shù)組元素不存在,而不是未過濾的危害數(shù)據(jù)。

時機

一旦PHP腳本開頭執(zhí)行,那么意味著HTTP苦求已經(jīng)全部終止。此時,用戶便沒有機遇向腳本發(fā)送數(shù)據(jù)。因此,沒有數(shù)據(jù)可以被輸入到腳本中甚至register_globals被開啟的處境下。這就是為什么初始化變量是分外好的習(xí)慣。

防注入

代碼如下?PHP

//PHP整站防注入程序,需要在公共文件中require_once本文件

//判斷magic_quotes_gpc狀態(tài)

if@get_magic_quotes_gpc

$_GET=sec$_GET;

$_POST=sec$_POST;

$_COOKIE=sec$_COOKIE;

$_FILES=sec$_FILES;

$_SERVER=sec$_SERVER;

functionsec$array

//假設(shè)是數(shù)組,遍歷數(shù)組,遞歸調(diào)用

ifis_array$array

foreach$arrayas$k=$v

$array[$k]=sec$v;

elseifis_string$array

//使用addslashes函數(shù)來處理

$array=addslashes$array;

elseifis_numeric$array

$array=intval$array;

return$array;

//整型過濾函數(shù)

functionnum_check$id

if!$id

die參數(shù)不能為空!;

//是否為空的判斷

elseifinject_check$id

die非法參數(shù);

//注入判斷

elseif!is_numetic$id

die非法參數(shù);

//數(shù)字判斷

$id=intval$id;

//整型化

return$id;

//字符過濾函數(shù)

functionstr_check$str

ifinject_check$str

die非法參數(shù);

//注入判斷

$str=htmlspecialchars$str;

//轉(zhuǎn)換html

return$str;

functionsearch_check$str

$str=str_replace_,_,$str;

//把_過濾掉

$str=str_replace%,%,$str;

//把%過濾掉

$str=htmlspecialchars$str;

//轉(zhuǎn)換html

return$str;

//表單過濾函數(shù)

functionpost_check$str,$min,$max

ifisset$minstrlen$str$min

die最少$min字節(jié);

elseifisset$maxstrlen$str$max

die最多$max字節(jié);

returnstripslashes_array$str;

//防注入函數(shù)

functioninject_check$sql_str

returneregiselect|inert|update|delete||/*|*|../|./|UNION|into|load_file|

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論