여러 PHP 파일에서 패턴을 제거하는 가장 좋은 방법은 무엇입니까? [폐쇄]

여러 PHP 파일에서 패턴을 제거하는 가장 좋은 방법은 무엇입니까? [폐쇄]

손상된 웹사이트에서 수백 개의 PHP 파일을 사용하고 각 파일 상단에 다음 서명 코드를 삽입합니다.

<?php /*457563643457563643*/ ?><?php /*5467543654675436*/ ?><?php /*6745833567458335*/ ?><?php /*87934538793453*/ ?>

<?php다음은 합법적인 PHP 코드가 있는 인접한 섹션 입니다 . 즉, 삽입된 코드가 별도의 줄에 있지 않습니다.

삽입된 코드를 제거하기 위해 다음 코드를 작성했습니다.

grep -Rl 457563643457563643 . | xargs sed -i 's/<[?]php.*457563643457563643.*[?]>/<\?php \/\/ RECOVERED FILE \?>/g'

훌륭하게 작동하지만 불행히도 삽입된 코드 뒤에 있는 합법적인 PHP 태그도 제거합니다.

각 파일 상단에 삽입된 다음 부분을 완전히 제거하는 가장 좋은 방법은 무엇입니까?

<?php /*457563643457563643*/ ?><?php /*5467543654675436*/ ?><?php /*6745833567458335*/ ?><?php /*87934538793453*/ ?>

답변1

이것최고방법은 침입 이전에 가지고 있던 백업 중 하나로 이동하여 거기서부터 시작하는 것입니다. 최선이 아닌 접근 방식을 원하는 것 같습니다. 이 작업을 수행하려면 sed를 사용할 수 있습니다.

sed를 사용하여 한 줄의 정확한 텍스트 블록을 삭제하는 가장 간단한 방법은 다음을 사용하는 것입니다.s명령명시적으로 제거합니다.

sed -e 's!<?php /\*457563643457563643\*/ ?><?php /\*5467543654675436\*/ ?><?php /\*6745833567458335\*/ ?><?php /\*87934538793453\*/ ?>!!'

*이는 인용한 정확한 문자열을 무엇이든 대체합니다. 메타 문자는 매번 이스케이프해야 하지만 그렇지 않으면 s!pattern!replacement!일반적인 방법으로 사용하기 쉽습니다.


저 할 수 있어요사용find -exec(더 나은 것,-execdir당신이 얻는다면) 파이프 대신 xargs,특히신뢰할 수 없는 디렉토리 트리가 있는 경우. 파일 이름에는 다양한 내용이 포함될 수 있습니다. 특히 개행 문자로 인해 원하지 않는 명령이 실행될 수 있습니다. 이 특정 sed명령줄에서 실제 문제가 될 가능성은 없지만 배제할 수는 없습니다.

grep내부에서 명령을 실행 find하고 파일이 일치하는 경우에만 해당 파일에 대해 작업을 수행하거나 그냥 처리하도록 sed할 수 있습니다. 패턴이 일치하지 않으면 이후에 파일은 동일해집니다.


그럼에도 불구하고, 저는 여전히 주의할 것을 권고합니다. 이러한 표시는 사물의 유해한 부분이 아니며 해당 부분이 그다지 명확하지 않을 수도 있습니다.

또한보십시오:감염된 서버를 처리하는 방법은 무엇입니까?

관련 정보