版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年定制化客戶合作協(xié)議
- 廠區(qū)園林景觀養(yǎng)護服務(wù)協(xié)議模板2024
- 2024年度高品質(zhì)鋁單板購銷協(xié)議
- 2023-2024學(xué)年浙江省紹興市重點中學(xué)第二學(xué)期高三數(shù)學(xué)試題統(tǒng)練(一)
- 2024年專業(yè)吊車租賃服務(wù)協(xié)議范本
- 2024跨境航空貨物運輸協(xié)議范本
- 2024年度高級店長任職協(xié)議
- 2024種苗行業(yè)購銷協(xié)議樣本
- 城市水溝2024年清理維護協(xié)議樣式
- 2024年個人經(jīng)營店鋪租賃協(xié)議
- 鐵路信號基礎(chǔ)繼電器ppt課件
- 污水設(shè)計構(gòu)筑物的計算
- 武當(dāng)太極劍劍譜(49式)詳細介紹及招式名稱匯總
- D702-1~3 常用低壓配電設(shè)備及燈具安裝(2004年合訂本)_(高清版)
- 風(fēng)量、溫度、噪聲測試記錄填寫范例
- 特種作業(yè)人員臺賬.doc
- 國家開放大學(xué)《管理英語1》邊學(xué)邊練參考答案
- (完整版)裝飾裝修工程監(jiān)理細則(詳解)最新(精華版)
- 電焊中級工(四級)職業(yè)技能鑒定考試題庫
- 多巴胺的藥理作用及用法PPT參考幻燈片
- 鋼結(jié)構(gòu)網(wǎng)架翻新改造施工方案
評論
0/150
提交評論