我正在使用preg_match來查找和刪除文件中的eva64 base64編碼病毒。preg_match殺死頁面
正則表達式bewlow:
/\s*eval\s*\(\s*base64_decode\s*\(\s*('[a-zA-Z0-9\+\/]*={0,2}'|"[a-zA-Z0-9\+\/]*={0,2}")\s*\)\s*\s*\)\s*(;)?\s*/
下面的代碼匹配:
上述正則表達式工作正常。
我想匹配通過連接進行單詞包裝的base64字符串。所以它應該符合以下以及「BASE64 + EN」。 「已編碼+病毒+ HERE」。
所以我改變了正則表達式爲:
/\s*eval\s*\(\s*base64_decode\s*\(\s*\'([a-zA-Z0-9\+\/]*(\'\s*\.\s*\')?[a-zA-Z0-9\+\/]*)*={0,2}\'|"([a-zA-Z0-9\+\/]*("\s*\.\s*")?[a-zA-Z0-9\+\/]*)*={0,2}"\s*\)\s*\s*\)\s*(;)?\s*/
其中發現部分匹配爲:
"BASE64+ENCODED+VIRUS+HERE"));
但是,當我嘗試應用這一整個文件比賽:http://pastebin.com/ED8sFUP0的頁面與死亡瀏覽器消息「加載頁面時重置了與服務器的連接。」
我有錯誤報告激活:
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('scream.enabled', TRUE);
但沒有任何顯示了不在這裏,而不是在Apache的錯誤日誌。
在不包含有問題的字符串的文件上使用的正則表達式如預期的那樣工作; preg_match不返回布爾值false它返回0意味着沒有正則表達式錯誤,並且它沒有找到任何匹配。
我的擔心並不一定是爲什麼正則表達式只發現部分匹配。這可能是我發生這種情況的一種錯字。
我想,當知道和如何在正則表達式編譯失敗打破了整個工藝鏈
apache > php > regex_compiler
我所知,這很可能是「因爲」我的正則表達式,只是碰巧編譯正確,但不匹配正確。這可能會導致一些不好的事情發生。但我的興趣是爲什麼正則表達式編譯器失敗,沒有錯誤,以及如何得到應該產生的錯誤消息。類似
事情進行了討論,但沒有解決此:php preg_match_all kills page for unknown reason
我[回答了您鏈接的問題](http://stackoverflow.com/a/10643701/626273)。我認爲你有類似的問題,但我仍然試圖理解你的正則表達式。 – stema