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

  • 14 stycznia, 2014
  • 5

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:

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

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