Złośliwe skrypty javascript. Jak wyszukiwać złośliwy kod bez programów antywirusowych i skanerów

1. Rozpakuj go do folderu witryny.
2. kliknij link twoja_witryna/fscure/
3. wszystko

Co on może zrobić?

1. Automatyczne wyszukiwanie wirusów według sygnatur.
2. Wyszukaj ciąg znaków w plikach
3. Usuwanie plików
4. Załataj złośliwy kod za pomocą wyrażeń regularnych

Skrypt nie wykona całej pracy za Ciebie i wymaga minimalnej wiedzy. Zaleca się wykonanie kopii zapasowej witryny przed rozpoczęciem pracy.

Jak to działa?

Po pierwszym uruchomieniu tworzy indeks plików. Plik fscure.lst znajduje się w folderze. Wyświetla listę plików zawierających potencjalnie złośliwe podpisy. „Potencjalnie złośliwy” oznacza, że ​​będziesz musiał zdecydować, czy jest to wirus, czy nie. Listę podpisów konfiguruje się w pliku config.php, stała SCAN_SIGN. Przy ustawieniach domyślnych skrypt nie sprawdza plików js i nie zawiera dla nich podpisów.

Najczęstsze problemy

1. nie tworzy indeksu fscure.lst. Może się to zdarzyć, jeśli nie ma wystarczających praw. Umieść 777 w folderze fscure

2. Błąd 5xx. Najczęściej „Przekroczono limit czasu bramy 504”. Skrypt nie ma czasu na przetworzenie i ulega awarii z powodu przekroczenia limitu czasu. W takim przypadku istnieje kilka sposobów na przyspieszenie jego pracy. Szybkość zależy przede wszystkim od wielkości indeksu. Znajduje się w pliku fscure.lst. Zazwyczaj w 90% przypadków można przetworzyć plik o rozmiarze do 5MB. Jeśli nie ma czasu, możesz zmniejszyć „chciwość” skryptu, zakazując skanowania *.jpg;*.png;*.css w konfiguracji.
W pliku config.php.

// ogranicznik; zdefiniuj("WYKLUCZ_PLIKI","*.js;*.jpg;*.png;*.css");

3. Hosting wyświetla ostrzeżenie typu
(HEX)base64.inject.unclassed.6: u56565656: /var/www/u65656565/data/www/34535335353.ru/fscure/index.php

W skrypcie nie ma wirusa i nigdy nie było. A (HEX)base64.inject.unclassed.6 to konstrukcja typu "echo base64_decode(" , która jest często spotykana i sama w sobie jest całkiem nieszkodliwa. Jednak w najnowszej wersji zastąpiłem ten kod.

Co zrobić, jeśli nie udało Ci się samodzielnie znaleźć wirusa?

Możesz skontaktować się ze mną w celu uzyskania pomocy. Moje stawki są skromne. Na wykonaną pracę udzielam gwarancji na 6 miesięcy. Koszt pracy wynosi 800 rubli. dla 1 witryny. Jeżeli na Twoim koncie znajduje się kilka serwisów, cena ustalana jest indywidualnie.

Jeśli udało Ci się wszystko zrobić samodzielnie, byłbym wdzięczny za nagrodę finansową lub link do mojej strony.

Moje wymagania:
Yandex
41001151597934

pieniądze internetowe
Z959263622242
R356304765617
E172301357329

WordPress to jeden z najpopularniejszych systemów zarządzania treścią, wykorzystywany do różnych celów, od blogowania po e-commerce. Istnieje szeroki wybór wtyczek i motywów WordPress. Zdarza się, że niektóre z tych rozszerzeń wpadają w ręce webmasterów po tym, jak pracował nad nimi jakiś napastnik.

Dla własnej korzyści mógłby zostawić w nich linki reklamowe lub kod, za pomocą którego będzie zarządzał Twoją witryną. Wielu użytkowników WordPressa nie ma dużego doświadczenia w programowaniu stron internetowych i nie wie, jak sobie poradzić w tej sytuacji.

Dla nich dokonałem przeglądu dziewięciu najskuteczniejszych narzędzi do wykrywania złośliwych zmian w kodzie działającej strony internetowej lub zainstalowanych dodatków.

1. Kontroler autentyczności motywu (TAC)

Theme Authenticity Checker (TAC) to wtyczka WordPress, która skanuje każdy zainstalowany motyw pod kątem podejrzanych elementów, takich jak niewidoczne linki lub kod zaszyfrowany Base64.

Po wykryciu takich elementów TAC zgłasza je administratorowi WordPressa, umożliwiając mu samodzielną analizę i w razie potrzeby poprawienie plików motywu źródłowego:

2. Wykorzystaj skaner

Exploit Scanner skanuje kod źródłowy całej witryny i zawartość bazy danych WordPress w poszukiwaniu wątpliwych dodatków. Podobnie jak TAC, wtyczka ta nie zapobiega automatycznie atakom ani nie zwalcza ich konsekwencji.

Pokazuje jedynie wykryte objawy infekcji administratorowi witryny. Jeśli chcesz usunąć złośliwy kod, będziesz musiał to zrobić ręcznie:

3. Bezpieczeństwo Sucuri

Sucuri to dobrze znane rozwiązanie zabezpieczające WordPress. Wtyczka Sucuri Security monitoruje pliki przesłane do witryny WordPress, utrzymuje własną listę znanych zagrożeń, a także umożliwia zdalne skanowanie witryny za pomocą bezpłatnego skanera Sucuri SiteCheck. Za opłatą abonamentową możesz jeszcze bardziej wzmocnić ochronę swojej witryny, instalując potężną zaporę sieciową Sucuri Website Firewall:

4. Ochrona przed złośliwym oprogramowaniem

Anti-Malware to wtyczka do WordPressa, która może znajdować i usuwać skrypty trojańskie, backdoory i inny złośliwy kod.

Ustawienia skanowania i usuwania można dostosować. Z tej wtyczki można korzystać po bezpłatnej rejestracji na gotmls.

Wtyczka regularnie odwiedza stronę producenta, przesyłając statystyki wykrycia złośliwego oprogramowania i otrzymując aktualizacje. Dlatego jeśli nie chcesz instalować na swojej stronie wtyczek monitorujących jej działanie, powinieneś unikać korzystania z modułu Anti-Malware:

5. Ochrona witryny antywirusowej WP

WP Antivirus Site Protection to wtyczka skanująca wszystkie pliki przesłane do witryny, w tym motywy WordPress.

Wtyczka posiada własną bazę sygnatur, która jest automatycznie aktualizowana poprzez Internet. Może automatycznie usuwać zagrożenia, powiadamiać administratora witryny e-mailem i wiele więcej.

Wtyczka jest instalowana i działa bezpłatnie, posiada jednak kilka płatnych dodatków, na które warto zwrócić uwagę:

6. Antywirus dla WordPressa

AntiVirus dla WordPress to łatwa w użyciu wtyczka, która może regularnie skanować Twoją witrynę i powiadamiać Cię o problemach związanych z bezpieczeństwem za pośrednictwem poczty elektronicznej. Wtyczka posiada konfigurowalną białą listę i inne funkcje:

7. Skaner złośliwego oprogramowania Quterra

Skaner Quterra sprawdza witrynę internetową pod kątem luk w zabezpieczeniach, wstrzyknięć kodu stron trzecich, wirusów, backdoorów itp. Skaner posiada tak ciekawe funkcje, jak skanowanie heurystyczne i wykrywanie linków zewnętrznych.

Podstawowe funkcje skanera są bezpłatne, natomiast niektóre dodatkowe usługi będą kosztować 60 USD rocznie:

8. Wordfence

Jeśli szukasz kompleksowego rozwiązania problemów związanych z bezpieczeństwem swojej witryny, nie szukaj dalej niż Wordfence.

Ta wtyczka zapewnia stałą ochronę WordPressa przed znanymi typami ataków, uwierzytelnianie dwuskładnikowe, obsługę „czarnej listy” adresów IP komputerów i sieci używanych przez hakerów i spamerów oraz skanowanie witryny w poszukiwaniu znanych backdoorów.

Wtyczka ta jest darmowa w wersji podstawowej, ale posiada także funkcjonalność premium, za którą producent wymaga niewielkiej opłaty abonamentowej:

9. Wemahu

Wemahu monitoruje zmiany w kodzie Twojej witryny i wyszukuje złośliwy kod.

Baza danych, w której wykryto złośliwe oprogramowanie, uzupełniana jest metodą crowdsourcingu: użytkownicy sami ją uzupełniają, przesyłając wyniki skanowania zainfekowanych instalacji WordPressa na stronę autora wtyczki. Wtyczka obsługuje także wysyłanie raportów e-mailem i inne przydatne funkcje.

Złośliwy kod przedostaje się do witryny w wyniku zaniedbania lub złośliwych zamiarów. Cele złośliwego kodu są różne, ale zasadniczo szkodzi on lub zakłóca normalne działanie witryny internetowej. Aby usunąć złośliwy kod na WordPressie, musisz go najpierw znaleźć.

Co to jest złośliwy kod w witrynie WordPress?

Z wyglądu najczęściej złośliwy kod to zbiór liter i symboli alfabetu łacińskiego. W rzeczywistości jest to zaszyfrowany kod, za pomocą którego wykonywana jest ta lub inna akcja. Działania mogą być bardzo różne, na przykład Twoje nowe posty są natychmiast publikowane w zasobie strony trzeciej. Zasadniczo jest to kradzież Twoich treści. Kody mają także inne „zadania”, na przykład umieszczanie linków wychodzących na stronach witryny. Zadania mogą być najbardziej wyrafinowane, ale jedno jest jasne: złośliwe kody należy wyszukiwać i usuwać.

W jaki sposób złośliwe kody przedostają się na stronę internetową?

Istnieje również wiele luk umożliwiających przedostanie się kodów do witryny.

  • Najczęściej są to motywy i wtyczki pobierane z „lewych” zasobów. Chociaż taka penetracja jest typowa dla tak zwanych łączy szyfrowanych. Jawny kod nie trafia do witryny.
  • Najbardziej niebezpieczna jest penetracja wirusa podczas włamania do witryny. Z reguły włamanie na witrynę pozwala nie tylko na umieszczenie „jednorazowego kodu”, ale także zainstalowanie kodu z elementami złośliwego oprogramowania (złośliwego programu). Na przykład znajdujesz kod i usuwasz go, ale po pewnym czasie zostaje on przywrócony. Istnieje ponownie wiele opcji.
  • Od razu zaznaczę, że walka z takimi wirusami jest trudna, a ręczne usuwanie wymaga wiedzy. Istnieją trzy rozwiązania tego problemu: pierwszym rozwiązaniem jest użycie wtyczek antywirusowych, na przykład wtyczki o nazwie BulletProof Security.

    To rozwiązanie daje dobre rezultaty, ale wymaga czasu, choć trochę. Istnieje bardziej radykalne rozwiązanie na pozbycie się złośliwych kodów, w tym także skomplikowanych wirusów, polegające na przywróceniu witryny z wcześniej utworzonych kopii zapasowych witryny.

    Ponieważ dobry webmaster robi to okresowo, możesz bez problemu przywrócić wersję niezainfekowaną. Trzecie rozwiązanie jest dla bogatych i leniwych, wystarczy zgłosić się do specjalistycznego „biura” lub do indywidualnego specjalisty.

    Jak szukać złośliwego kodu w WordPress

    Ważne jest, aby zrozumieć, że złośliwy kod na WordPressie może znajdować się w dowolnym pliku w witrynie, a niekoniecznie w działającym motywie. Może wymyślić wtyczkę, motyw lub „domowy” kod pobrany z Internetu. Istnieje kilka sposobów znalezienia złośliwego kodu.

    Metoda 1: Ręcznie. Przewijasz wszystkie pliki witryny i porównujesz je z plikami niezainfekowanej kopii zapasowej. Jeśli znajdziesz kod innej osoby, usuń go.

    Metoda 2: Korzystanie z wtyczek zabezpieczających WordPress. Na przykład, . Ta wtyczka ma świetną funkcję, skanuje pliki witryny pod kątem obecności kodu innych osób i wtyczka doskonale radzi sobie z tym zadaniem.

    Metoda 3. Jeśli masz rozsądne wsparcie hostingowe i wydaje Ci się, że na stronie jest ktoś inny, poproś go o przeskanowanie Twojej witryny swoim programem antywirusowym. Ich raport będzie zawierał listę wszystkich zainfekowanych plików. Następnie otwórz te pliki w edytorze tekstu i usuń złośliwy kod.

    Metoda 4. Jeśli możesz pracować z dostępem SSH do katalogu witryny, to śmiało, ma ona własną kuchnię.

    Ważny! Niezależnie od tego, w jaki sposób będziesz szukać złośliwego kodu, przed wyszukaniem, a następnie usunięciem kodu zamknij dostęp do plików witryny (włącz tryb konserwacji). Pamiętaj o kodach, które same się przywracają w przypadku ich usunięcia.

    Wyszukaj złośliwe kody za pomocą funkcji eval

    W PHP istnieje taka funkcja o nazwie eval. Pozwala na wykonanie dowolnego kodu na swojej linii. Co więcej, kod można zaszyfrować. To właśnie ze względu na kodowanie złośliwy kod wygląda jak zbiór liter i symboli. Dwa popularne kodowania to:

  • Baza64;
  • Rot13.
  • Odpowiednio w tych kodowaniach funkcja eval wygląda następująco:

    • eval(base64_decode(...))
    • eval (str_rot13 (...)) //w cudzysłowie wewnętrznym, długimi, niejasnymi zestawami liter i symboli..

    Algorytm wyszukiwania złośliwego kodu za pomocą funkcji eval jest następujący (pracujemy z panelu administracyjnego):

    • przejdź do edytora strony (Wygląd → Edytor).
    • skopiuj plik funkcje.php.
    • otwórz go w edytorze tekstu (na przykład Notepad++) i wyszukaj słowo: eval.
    • Jeśli go znajdziesz, nie spiesz się, aby cokolwiek usunąć. Musisz zrozumieć, o co „prosi” ta funkcja. Aby to zrozumieć, należy rozszyfrować kod. Do dekodowania służą narzędzia online zwane dekoderami.
    Dekodery/kodery

    Dekodery działają po prostu. Kopiujesz kod, który chcesz odszyfrować, wklejasz go w pole dekodera i dekodujesz.

    W chwili pisania tego tekstu nie znalazłem ani jednego zaszyfrowanego kodu w WordPressie. Znalazłem kod na stronie Joomla. W zasadzie nie ma różnicy w rozumieniu dekodowania. Spójrzmy na zdjęcie.

    Jak widać na zdjęciu funkcja eval po odkodowaniu nie wyświetliła strasznego kodu zagrażającego bezpieczeństwu strony, lecz zaszyfrowany link autorski od autora szablonu. Można go również usunąć, ale powróci po aktualizacji szablonu, jeśli nie użyjesz .

    Podsumowując, chciałbym zauważyć, aby nie dostać wirusa na stronie:

    • Złośliwy kod na WordPressie często zawiera motywy i wtyczki. Dlatego nie instaluj szablonów i wtyczek z „lewych”, niezweryfikowanych zasobów, a jeśli to zrobisz, sprawdź je dokładnie pod kątem obecności linków i funkcji wykonawczych PHP. Po zainstalowaniu wtyczek i motywów z „nielegalnych” zasobów sprawdź witrynę za pomocą oprogramowania antywirusowego.
    • Pamiętaj o wykonywaniu okresowych kopii zapasowych i wykonywaniu innych.
    Złośliwy JavaScript

    Moja opinia jest taka, że ​​łatwiej i skuteczniej jest chronić się przed wstrzykniętymi złośliwymi skryptami do przeglądarki (atakami XSS przechowywanymi) za pomocą narzędzi przeglądarki, co wyraziłem wcześniej: . Ochrona przeglądarki przed JavaScriptem, polegająca na dodaniu kodu filtrującego do stron html serwisu, jest zapewne niezawodna, jednak obecność takiej ochrony nie eliminuje konieczności stosowania także filtra serwerowego. W przypadku tych samych ataków XSS można zorganizować dodatkową linię obrony na serwerze. Musimy także pamiętać o możliwości wprowadzenia przez osobę atakującą skryptów nie przeglądarkowych, a serwerowych (php) do wiadomości HTML wysyłanej z witryny, której przeglądarka nie będzie w stanie rozpoznać.

    Skrypt atakujący, czy to oparty na przeglądarce, czy na serwerze, jest programem; należy pamiętać, że program ten zawsze będzie miał pewne symboliczne różnice w stosunku do „czystego” HTML. Spróbujmy znaleźć takie różnice i wykorzystać je do zbudowania filtra HTML na serwerze. Poniżej znajdują się przykłady złośliwego kodu JavaScript.

    XSS:

    Jakiś tekst


    Jakiś tekst

    Zaszyfrowane XSS:

    Jakiś tekst


    Jakiś tekst

    Przeglądarki odzyskują tekst z prymitywów znakowych nie tylko znajdujących się w kontenerach HTML (między znacznikami otwierającymi i zamykającymi), ale także wewnątrz samych znaczników (między< и >). Kodowanie URL jest dozwolone w adresach http. Utrudnia to rozpoznanie złośliwego kodu po stronie serwera, ponieważ tę samą sekwencję znaków można przedstawić na różne sposoby.

    Robaki XSS:

    "+innerHTML.slice(action= (method="post")+.php",155)))">





    alert("xss");with(new XMLHttpRequest)open("POST","post.php"),send("content="+_.outerHTML)

    Powyższe robaki XSS to tylko niektóre z wielu zgłoszonych do konkursu Roberta Hansena (znanego również jako RSnake) w styczniu 2008 r. na najkrótszego szkodliwego robaka JavaScript (wyniki konkursu).

    Oznaki ataków XSS

    Skrypt XSS to program uzyskujący dostęp do obiektów DOM (Document Object Model) i ich metod. W przeciwnym razie jest mało prawdopodobne, aby był w jakikolwiek sposób szkodliwy. Na przykład ciąg JavaScript
    onckick="var a = "xss""
    nie ma wpływu na model obiektowy dokumentu, więc nawet jeśli jest osadzony w znaczniku HTML, taki ciąg jest nieszkodliwy. Tylko manipulując obiektami dokumentów HTML i ich metodami, haker może wyrządzić znaczną szkodę witrynie. Na przykład linia
    onmousemove="document.getElementsByTagName("treść").innerHTML="XSS""
    zastępuje już zawartość strony.

    Znakiem dostępu do metod DOM są nawiasy, a także kropki po lewej stronie znaku równości. Nawiasów można również używać w HTML do ustawiania koloru w formacie rgb(), jednakże kolory czcionki i tła w HTML są ustawiane na co najmniej trzy inne sposoby. Dlatego można zrezygnować z nawiasów bez pogarszania wyrazistości tekstu HTML. Z reguły należy przyjąć, że nawiasy znajdują się wewnątrz znacznika (czyli pomiędzy< и >) - jest to bardzo niebezpieczne, jeśli otrzymamy wiadomość od użytkownika na serwerze, wiadomość ta zawiera w tagach nawiasy, wówczas najbardziej odpowiednią rzeczą, którą powinniśmy zrobić, to zablokować taką wiadomość.

    Kropka może być zawarta w znacznikach HTML: przy podaniu adresu linku (tag ); podczas ustawiania rozmiaru elementów HTML (style="height:1,5in; szerokość:2,5in;" ). Ale sekwencje znaków formularza
    punkt litery jest równy
    nie może znajdować się w znacznikach HTML. Jeśli określona sekwencja znajduje się wewnątrz znacznika HTML, wiadomość od użytkownika najprawdopodobniej zawiera skrypt i powinna zostać zablokowana.

    Kolejnym oczywistym znakiem ostrzegawczym jest symbol „+” znajdujący się wewnątrz etykiety. W HTML-u bez skryptów nie ma czegoś takiego. Jeśli znajdziemy w tagach plusy, bezlitośnie blokujemy przekaz.

    Użytkownik witryny, który ma dobre intencje i dodaje komentarz za pomocą edytora wizualnego, nigdy nie ucieknie się do szyfrowania za pomocą symbolicznych prymitywów wewnątrz znaczników HTML. Stosowanie prymitywów symbolicznych w tagach nie daje żadnych korzyści w postaci dodatkowych środków wyrazu, wymaga jedynie dodatkowego czasu na pisanie. W większości przypadków można by pomyśleć, że użytkownik mający dobre intencje nawet nie wie, że w HTML istnieją pewne podstawowe znaki. Stąd zasada: ampersand wewnątrz tagu jest dowodem ataku na stronę. W związku z tym, jeśli to zobaczymy, blokujemy wiadomość.

    Podobną zasadę należy przyjąć w odniesieniu do symbolu „%”, który można zastosować w kodowaniu adresu URL. Jednak procenty są również używane w „czystym” HTML w celu ustalenia względnych rozmiarów elementów. Niebezpieczne kombinacje to takie, w których bezpośrednio po znaku „%” następuje litera lub cyfra.

    Neutralizacja skryptów serwera

    W przeciwieństwie do interpreterów JavaScript w przeglądarkach, interpreter PHP na serwerze nie pozwala na swobodę podczas pisania tekstu programu. Dlatego, aby zneutralizować ewentualny skrypt serwera, wystarczy całkowicie zastąpić w wiadomości HTML użytkownika wszystkie znaki niezbędne przy pisaniu programu PHP ich prymitywami HTML. Do wymiany są przede wszystkim znaki dolara i podkreślenia, kropka, nawiasy kwadratowe, nawiasy kwadratowe i klamrowe, znaki plus i minus oraz znak ukośnika odwrotnego.

    Filtr PHP dla wiadomości HTML

    $message to wiadomość HTML otrzymana z edytora wizualnego do serwera.

    // zapamiętaj długość wiadomości $lenmessage = strlen($message); // wytnij znacznik komentarza $message = preg_replace("//", "", $message); // wytnij każdy znacznik, w którym atrybut „src” odnosi się do zasobu zewnętrznego $message = preg_replace("/]+?src[\w\W]+\/\/[^>]+?>/i" , " ", $wiadomość); // wytnij każdy znacznik zawierający dowolny znak z wyjątkiem: - a-z 0-9 / . :; " = % # space $message = preg_replace("/]+[^->a-z0-9\/\.\:\;\"\=\%\#\s]+[^>]+?> /i”, „”, $wiadomość); // wytnij każdy znacznik zawierający sekwencję ". a-z =" $message = preg_replace("/]+?\.+?\=[^>]+?>/i", "", $message); // wytnij każdy znacznik zawierający sekwencję „% a-z” lub „% 0-9” $message = preg_replace("/]+?\%+?[^>]+?>/i", "", $ wiadomość); // wytnij każdy znacznik zawierający sekwencję "script" lub "js:" $message = preg_replace("/]*?script[^>]*?>/i", "", $message); $wiadomość = preg_replace("/]*?js:[^>]*?>/i", "", $wiadomość); // wytnij każdy znacznik rozpoczynający się od znaku innego niż „a-z” lub „/” $message = preg_replace(”/]*?>/i”, „”, $message); // sprawdź: czy wiadomość jest skrócona, to zakończ program $lenmessage2 = strlen($message); if ($lenmessage != $lenmessage2) ( print "Nie można dodać wiadomości"; exit; ) // wykonaj całościowe zastępowanie niebezpiecznych znaków odpowiadającymi im prymitywami $message = str_replace("$", "$" , $wiadomość); $wiadomość = str_replace("_", "_", $wiadomość); $wiadomość = str_replace(.”, „.”, $wiadomość); $wiadomość = str_replace(chr(92), "\, $wiadomość); // \ $wiadomość = str_replace("(", "(", $wiadomość); $wiadomość = str_replace()", ")", $wiadomość); $wiadomość = str_replace("[", "[", $wiadomość); $wiadomość = str_replace("]", "]", $wiadomość); $wiadomość = str_replace("(", "(", $wiadomość); $wiadomość = str_replace()", ")", $wiadomość); $wiadomość = str_replace("?", "?", $wiadomość); // wiadomość została zweryfikowana, zawarte w niej skrypty zostały zneutralizowane

    Należy zaznaczyć, że filtr nie usuwa sparowanych tagów. Powiedzmy, że mamy
    Kliknij tutaj!
    Filtr wytnie tylko tag , ale sparowany (zamykający) tag pozostanie. Jeśli wyślesz do przeglądarki wiadomości zawierające tagi bez odpowiadających im par, możesz doświadczyć kłopotów w postaci „przekrzywienia” strony. Nie wiadomo, do którego tagu otwierającego przeglądarka dopasuje pozostały, niesparowany tag zamykający. Dlatego, a także ze względów bezpieczeństwa, wiadomości, w których coś zostało wycięte przez filtr, nie powinny w ogóle być wysyłane do przeglądarki. Lepiej wydrukować coś w stylu „Nie można dodać wiadomości” i wyjść z programu.

    Oczekuje się, że wiadomość zostanie zapisana do pliku (nie do bazy danych).

    Dyskusja

    Będę wdzięczny za krytykę. Napisz na forum pomocy technicznej w sekcji