Klasa PHP – sposób na doklejony kod do plików

Czasem się zdarza, że przez dziurawy CMS, wyciek haseł przez dziury w klientach FTP do wielu plików dokleja się złośliwy kod (wysyłający maile, przekierowujący na inne strony etc.). Ręczna edycja nie wchodzi w grę przy setkach, tysiącach plików. Podmiana plików na świeże często też nie wchodzi w grę ze względu na stratę wprowadzonych zmian bądź po prostu braku czystych plików źródłowych. Mam rozwiązanie w postaci prostej, efektywnej klasy PHP!

Skrypt jest bardzo prosty, kilka linijek kodu załatawia sprawę – wykonanie przy 3 tysiącach plików trwa… 3 sekundy, czyli średnio wydajność 1000 plików na sekundę. Wykonanie kodu dla serwera nie jest wielkim wyzwaniem.

GOTOWA KLASA:

Reklama: Panel do zarządzania zapleczem WordPress - WPis

Oszczędź czas na zarządzaniu zapleczem! Masowe dodawanie nowych treści i linków, edycja, usuwanie! Więcej informacji na http://i4a.pl/?p=wpis

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class CzyscPliki
{
   public $dir;
   public $wyrzuc;

   public function wykonaj($dir,$wyrzuc){
    $lista_pliki = scandir($dir);
    echo '<ol>';
    foreach($lista_pliki as $plik){
        if($plik != '.' && $plik != '..'){
            echo '<li>' . $plik;
            if(is_dir($dir . '/' . $plik)) $this->wykonaj($dir . '/' . $plik, $wyrzuc);
            echo '</li>';
            $this->podmien($dir . '/' . $plik, $wyrzuc);
           
        }
    }
    echo '</ol>';
}

   public function podmien ($plik,$to_wyrzuc) {
        $tu = file_get_contents($plik);
        $go = str_replace($to_wyrzuc,'',$tu);
        file_put_contents($plik,$go);
    }

 
}

Szybki opis: klasa tworzy najpierw listę wszystkich dostępnych katalogów i plików (oczywiście podąża w głąb struktury katalogów listując wszystkie pliki). Następnie dla każdego pliku wykonuje funkcję „podmień” – zamienia podany ciąg znaków na pusty i zapisuje zmieniony plik. Jedym słowem usuwa złośliwy kod.

Wykorzystanie klasy:

1
2
$wywal = new CzyscPliki;
$wywal->wykonaj('.','<?php echo /'Jestem złośliwym kodem!/'; ?>');

Pierwszym argumentem jest ścieżka od której ma się rozpocząć listowanie plików. Kropka oznacza, że listowanie ma się zacząć od katalogu, w którym znajduje się plik z wywołaniem klasy. Można dowolnie zmienić ten argument na katalog np.:

1
2
$wywal = new CzyscPliki;
$wywal->wykonaj('wp-content/themes','<?php echo /'Jestem złośliwym kodem!/'; ?>');

Drugi argument to kod, który zostanie usunięty. Pamiętaj, aby wszystkie znaki apostrofu złośliwego kodu (‚) poprzedzić w argumencie backslashem: (\) – dokładnie tak jak na przykłazie. W przeciwym wypadku kod PHP nie będzie się wykonywał (błąd składni). Można łatwo podmienić wszystkie występujące znaki apostrofu na przykład programem notepad++.

okazwłoka

Niezależny specjalista ds.... ble ble ble. Nie jestem żadnym specjalistą Raczej lubię bawić się z Google, odkrywać luki, pisać w PHP różne rozwiązania SEO i... tyle.

5 thoughts on “Klasa PHP – sposób na doklejony kod do plików

  • Lipiec 6, 2015 at 9:51 pm
    Permalink

    Coś nie działa mi to, biała strona. Coś trzeba dopisać aby to się wykonywało ??

    wykonaj(‚.’,”);

    ?>

    Coś mi tu jeszcze brakuje ?? hmm ?

  • Lipiec 7, 2015 at 2:12 pm
    Permalink

    Najlepiej wrzuć kod na jakiś pastebin czy coś w tym stylu, ewentualnie daj na początek za znacznik <?php
    error_reporting(0);

    i zobacz co się dzieje.

  • Luty 9, 2016 at 6:43 pm
    Permalink

    A mógłbyś napisać, jak to w praktyce zrobić, krok po kroku? Dla zielonych?

  • Grudzień 4, 2016 at 11:50 pm
    Permalink

    Wydaje się być pomocny tylko gdzie to umiescić?

  • Grudzień 7, 2016 at 7:22 am
    Permalink

    Np tak:
    Tworzysz na serwerze w katalogu publicznym plik czysc.php, wklejasz doniego kod „GOTOWA KLASA” (oczywiście musi się rozpoczynać znacznikiem < ?php i kończyć znacznikiem ?>
    Następnie przed tą całą klasę, ale po znaczniku

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Title
Caption
File name
Size
Alignment
Link to
  Open new windows
  Rel nofollow