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