Suchen und ersetzen mit regex via Notepad++. Aber nur ein mal pro Seite?
Hallo,
ich muss ein paar tausend Dateien bereinigen, die einen Schadcode enthalten (joomla-Installation).
Alle Seiten sind folgendermaßen aufgebaut:
<?php SCHADCODE ?><?php Originalcode
Manchmal sind die php-Seiten aber auch Teil eines Programmcodes. Dann sehen sie so aus:
<?php SCHADCODE ?> Originalcode
Meine Herangehensweise bisher war, mit
.<\?php(.?)?>*. den Schadcode zu finden und zu ersetzen. Leider findet dieser Suchstring aber auch das zweite, öffnende php-Tag, das ja - wenn vorhanden - bleiben soll. Daher habe ich den Versuch unternommen, mit obigen Suchstring zu suchen, aber nicht durch nichts, sondern durch ein öffnendes php-tag zu ersetzen.
Nur geschieht dies dann auch in jenen Dateien, die kein öffnendes php-Tag haben sollen.
Kurzum: Wie sage ich dem Suchstring, dass er nur bis zum ersten schließenden php-Tag suchen soll und dann stoppen? Mit anbderen Worten: Er soll das erste öffnende (<?php) und erste schließende php-Tag (?>) und diese beiden Tags nebst allem dazwischen löschen.
2 Antworten
und wenn du genau nach <?php SCHADCODE ?> also dem tatsächlichen kompletten Schadcode?
Wenn Notepad++ das nicht kann, der alte Phase5, den ich hier anbiete, macht das mit dem Dateiübergreifenden Ersetzen prima, hab ich schon oft, um z.B. einen Werbecode zu ersetzen schon oft genutzt:
http://www.peter-wiegel.de/phaseV.html
Wenn Du da noch fragen hast, kannst Du mich gern direkt fragen Mail ist auf der Seite.
Hat dein Provider keine Backup-Funktion im Angebot, das du deine Website darüber auf den Zustand vor der Infektion zurücksetzten kannst?
Wenn nicht, ist wohl Handarbeit angesagt, dann für die Zukunft: alle Seiten auch lokal gespeicherrt behalten, schön auf einem externen Datenträger! (das ist bei mir, seit ich 1997 mit Internetseiten begann immer Pflicht gewesen, trotz des Backup-Systems meines Providers.
wenn du doch sowieso php verwendest, wieso schreibst du dir nicht einfach nen php script? ich bin im thema regex nicht so fortgeschritten und könnte mir höchstens vorstellen das du dir das in ne gruppe steckst. dann müsstest du theoretisch 2 gruppen haben und kannst sagen ich möchte nur gruppe 1 mit dem replace ansprechen. ob das notepad++ kann ist die andere frage. lieber gleich mit php einmal nen strpos fürs erste <?php und das erste ?> und dann alles zwischen diesen positionen durch "" (nichts) überschreiben und fertig. so einfach kann das leben sein :D
Danke aber geht leider nicht. Der eigentliche Schadcode sieht auf jeder Seite anders aus. Einzig die öffnenden und schließenden php-Tags sind überall gleich.