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:

class CzyscPliki
{
public $dir;
public $wyrzuc;

public function wykonaj($dir,$wyrzuc){
$lista_pliki = scandir($dir);
echo '

    ';
    foreach($lista_pliki as $plik){
    if($plik != '.' && $plik != '..'){
    echo '

  1. ' . $plik;
    if(is_dir($dir . '/' . $plik)) $this->wykonaj($dir . '/' . $plik, $wyrzuc);
    echo '
  2. ';
    $this->podmien($dir . '/' . $plik, $wyrzuc);

    }
    }
    echo '

';
}

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:

$wywal = new CzyscPliki;
$wywal->wykonaj('.','');

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.:


$wywal = new CzyscPliki;
$wywal->wykonaj('wp-content/themes','');

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

Co jest grane?

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