if(isset($ _ REQUEST[' GLOBALS '])| | isset($ _ FILES[' GLOBALS ']))exit('請求被拒絕');
當提交惡意的全局變量時,這壹行被攔截。
@ set _ magic _ quotes _ runtime(0);
$ MQG = get _ magic _ quotes _ GPC();
下面是閱讀系統環境變量。
foreach(array('_POST ',' _GET ',' _COOKIE') as $__R) {
這是壹個新數組,上面有三個值。
if(isset($$__R)) {
foreach($ $ _ _ R as $ _ _ k = & gt;$__v) {
if(isset($ $ _ _ k)amp;& amp$ $ _ _ k = = $ _ _ v)unset($ $ _ _ k);
}
我想這是最難的部分。。$__R在第壹個循環中,值是_POST後跟壹個$,即$_POST。
如果$_POST已經賦值了,這就有點多余了,因為它是壹個內置變量,必須存在。
然後把$$__R當做$_POST $_GET什麽的,把$_POST的每個值拆分成$__V,索引存放在$ _ _ k,如果有$ _ POST[' a ']= ' b ';那麽$__K是a,$ _ _ v是b,下面是同壹個意思。
如果$($__K),也就是$a已經存在,並且這個變量的值和POST now的值相同,那麽原來的變量就會被取消。只保留POST中的變量。
也就是說,如果代碼原來有$a='b ',現在提交了壹個$ _ POST[' a ']= ' b ';現在刪除原$a,保留後壹個。這是用來在別人已經成功註入的變量的時候,殺死這些變量的。
如果(!$ MQG)$ $ _ _ R = daddslashs($ $ _ _ R);
上面這個是檢查環境變量和魔術引號是否打開,如果沒有,過濾整個$_POST(GET COOKIE)。
$ $ _ _ R = strip _ SQL($ $ _ _ R);
$ $ _ _ R = dsafe($ $ _ _ R);
上面兩個是自定義濾鏡,好像是過濾SQL註入什麽的。原理同上
}
}