<?
$a = '前程似錦';
$b = ';phpinfo();//';
?>
于是找ryat牛討論了一下這個(gè)問題的本質(zhì)[雖然最后跑開這個(gè)問題很遠(yuǎn)],其實(shí)08年時(shí)候多字節(jié)編碼帶來的安全問題在全世界都很流行,包括blackhat等會(huì)議上都有相關(guān)議題出現(xiàn),而這些都是站在“編碼”的這個(gè)角度去看待的,而沒有具體在應(yīng)用程序的角度看待這個(gè)問題,比如上面的php的處理問題。
其實(shí)上面這個(gè)代碼的本質(zhì)是php處理方式是按‘單字節(jié)’的方式。
那么就不難理解了:錦 ---> E55C 因?yàn)閜hp單字節(jié)的處理方式最后是 E5 5C 兩個(gè)獨(dú)立的字節(jié)來處理,而5C-->\相當(dāng)于:
<?
$a = '前程似*\';
$b = ';phpinfo();//';
?>
\轉(zhuǎn)義了后面的‘,最終導(dǎo)致phpinfo();的執(zhí)行。
由此我們可以看出,單字節(jié)處理的程序在處理多字節(jié)編碼的時(shí)候,很有可能因?yàn)?ldquo;標(biāo)準(zhǔn)不和諧統(tǒng)一”,導(dǎo)致安全問題。
在我和ryat離題的討論里,他堅(jiān)持說是文件的編碼問題,而我認(rèn)為是php單字節(jié)的處理方式才是問題的關(guān)鍵所在..... 其實(shí)這是我們倆看問題的角度的問題導(dǎo)致的....
對(duì)于一個(gè)廣義的命題應(yīng)該說:程序員在處理問題的標(biāo)準(zhǔn)不統(tǒng)一可能導(dǎo)致的安全問題。