2012-03-07 49 views
0

我的網站被黑客入侵。它會在我的所有php文件的第一行添加一些腳本。我想要使​​用Netbeans搜索刪除該腳本,並用REGEX選項替換。需要REGEX幫助清理被黑客入侵的腳本

看來黑客腳本上有相同的圖案

<?php /**/ eval(base64_decode("[SomeRandomString]"])); ?> 

能否請您給我的正則表達式,除去上面的字符串?

這是我砍死完整劇本的例子http://ideone.com/6ltMf

回答

3

像這樣的東西你簡短的例子相匹配,並且您粘貼的一個:

$pattern = '~^\<\?php\s?\/\*\*\/\seval\(base64\_decode\(\".*?\)\)\;\s?\?\>~' 
// You might need to incorporate the multi-line option at the end of the pattern 

事後諸葛亮:今後你應該考慮使用版本控制系統快速重置所有更改的文件。

+0

你能解釋在字符串的第一個和最後的'〜'的含義嗎? – GusDeCooL 2012-03-07 16:50:03

+1

'~'是PHP的正則表達式引擎需要的模式分隔符。它們表示模式的開始和結束。該字符本身是任意的 - 很多人使用'/'(PHP在'preg_match()'的示例中使用'/''http://php.net/preg_match)。我更喜歡模式中不存在的字符來幫助提高可讀性(就好像正則表達式有任何可讀性的希望:p)。 – 2012-03-07 16:53:37

+0

測試並嘗試刪除'〜'字符,我不知道也許該字符只能在PHP中工作,但在這裏我使用Netbeans替換功能。像魅力一樣工作。謝謝。 :D – GusDeCooL 2012-03-07 16:54:33

0

爲什麼不只是手動刪除它?如果您的文件太多,自動化聽起來不錯。由於它是對字符串進行解碼並將其評估爲PHP表達式,因此如果它真正實現了自動自動化,則它應該對每個文件都是相同的。只需複製字符串,然後告訴腳本在所有.php文件中查找確切的字符串。我相信這件事情就像

"eval(base64_decode("aWYoZnVuY3Rpb25fZXhpc3RzKCdvYl9zdGFydC.......));" 

的特殊字符是:[\^$ | * +(),如果你要搜索他們需要用一個「\」,以便先於他們?匹配正常工作,所以你的RE變成:

"eval\(base64_decode\("aWYoZnVuY3Rpb25fZXhpc3RzKCdvYl9zdGFydC.......\)\);" 

你將需要檢查字符串不包含任何更多的特殊字符。你也許只是想重新安裝你的PHP版本,這取決於這個病毒的作用,因爲它,但你應該只是谷歌「eval base64_decode」,這就是我發現有關該病毒的論壇帖子。