<?
$a = '前程似錦';
$b = ';phpinfo();//';
?>
于是找ryat牛讨论了一下这个问题的本质[虽然最后跑开这个问题很远],其实08年时候多字节编码带来的安全问题在全世界都很流行,包括blackhat等会议上都有相关议题出现,而这些都是站在“编码”的这个角度去看待的,而没有具体在应用程序的角度看待这个问题,比如上面的php的处理问题。
其实上面这个代码的本质是php处理方式是按‘单字节’的方式。
那么就不难理解了:錦 ---> E55C 因为php单字节的处理方式最后是 E5 5C 两个独立的字节来处理,而5C-->\相当于:
<?
$a = '前程似*\';
$b = ';phpinfo();//';
?>
\转义了后面的‘,最终导致phpinfo();的执行。
由此我们可以看出,单字节处理的程序在处理多字节编码的时候,很有可能因为“标准不和谐统一”,导致安全问题。
在我和ryat离题的讨论里,他坚持说是文件的编码问题,而我认为是php单字节的处理方式才是问题的关键所在..... 其实这是我们俩看问题的角度的问题导致的....
对于一个广义的命题应该说:程序员在处理问题的标准不统一可能导致的安全问题。