2014年10月28日 星期二

ⓒPunBB 1.4.2 修正preg_replace在PHP 5.6的語法問題


站長今天在更新PHP的時候,發現PunBB出現了這樣的問題:


爬了些文章後發現原來是新版PHP做了一些修正,它將preg_replace的參數e功能給取消了。由於PunBB自己寫的parser.php內使用了許多e參數,所以才導致錯誤訊息的出現,而文章最下面這份原始碼是我將參數e先拿掉後的程式碼。

替換此檔案以後,那些錯誤訊息就會消失,可是值得注意的是這樣的系統究竟還安不安全呢? 其實很難講,因為參數e是可以讓字串語法實際執行的,看起來關掉似乎反而可以阻擋掉PHP注入的攻擊,但也可能導致PunBB本身程式錯誤而出現漏洞,而且PunBB從2012年1月就再也沒有更新了,所以建議只允許內部討論使用就好,不對外公開的情況下還是一款不錯用的工具。

PHP (include/parser.php):


後記:
更新是最簡單來防範攻擊的方法。

沒有留言: