Przegląd skryptów genialnych #2

Nie wiem czy ktokolwiek pamięta jeszcze pierwszy wpis z tej serii. Ja w każdym razie o nim zapomniałem. Jednak przy okazji dzisiejszego przeglądania jednego ze skryptów do tworzenia gry MMORPG via WWW przypomniałem sobie o tej serii i postanowiłem co nieco napisać.

Miałem zamiar przetestować skrypt MafiaWarz służący do tworzenia gier MMORPG w klimatach gangsterskich. Oczywiście nie spodziewałem się żadnych rewelacji po darmowym skrypcie tego typu, ale to co tam zobaczyłem dało kilka okazji do śmiechu dlatego postanowiłem się tym podzielić ze światem ;)

Zacznijmy rzecz jasna od początku, bo tak bywa najłatwiej. Instrukcji instalacji/pliku README nigdzie nie było, ale akurat zaimportowanie jednego pliku SQL i uzupełnienie danych w configu (choć dość trudnym do znalezienia) nie należało do bardzo trudnych.

Problem pojawił się podczas gdy chciałem zarejestrować konto. Na szczęście Wujek Google pozwolił szybko dojść do rozwiązania tego problemu - rozbiło się w zasadzie o jedną linijkę, więc na razie idzie dość gładko. Teraz zacznijmy ocenę właściwą:

  1. Błąd uniemożliwiający rejestrację na samym początku. Wielu ludzi może to odstraszyć, ale może i słusznie? :P
  2. Hasło miało zostać wysłane mailem, ale jako że skrypt testowałem na localhoście, to postanowiłem podmienić hasło w bazie danych na nowe. Długo szukałem charakterystycznego zahashowanego hasła w tabeli users, ale go nie znalazłem, bo hasła są trzymane w niezakodowanej postaci.
  3. Kontynuując temat bazy danych - brak prefiksów tabel, a ich nazwy zbyt oryginalne nie są, więc może być mały problem.
  4. Pokręcone typy pól: money jako int, online oraz lastcrime (trzymane jako znacznik czasu) jest polem typu varchar(100) zamiast po prostu int
  5. Jako że skrypt jest po angielsku, postanowiłem go przynajmniej częściowo spolszczyć. Niestety mimo tego, że użytkownicy mają możliwość zmiany języka w profilu to pliki językowe są przygotowane tylko dla dwóch z kilkudziesięciu zakładek. Dodatkowo oba te pliki zawierają dużo nigdzie niewystępujących tekstów, a nie mają tych najważniejszych.
  6. Totalny bajzel w plikach. Dużo zbędnych, po kilka kopii tego samego pliku, pliki do niczego niepotrzebne (przykładowo plik w00t.php zawierający jedynie pustą tabelę w HTML). Takie rzeczy zdecydowanie nie powinny leżeć w publikowanej wersji.
  7. Zero konwencji kodowania dla PHP
  8. Kod HTML na poziomie internetu łupanego. Można by go nazwać HTML-em 2.0 gdyby nie brak doctype. Nazwijmy go więc umownie HTML-em 0
  9. Design oparty na ramkach, znaczniki noframes oczywiście puste...
  10. Postanowiłem znaleźć panel administracyjny. Zajrzałem do jedynego pliku który wydał mi się właściwy (admincp.php), aby poszukać jakie pole w bazie muszę zmienić. Zabezpieczenie tego pliku naprawdę mnie oczarowało.
    if ($userlevel != 3){
        echo "Your not a admin.";
    }

    faktycznie - większość użytkowników na pewno przestraszy się tej informacji i czym prędzej ucieknie. Co jednak z pozostałymi niegodziwcami? Czy użycie die() byłoby zbyt trudne?

  11. Używanie " praktycznie wszędzie gdzie to niepotrzebne, np. dla zwyczajnych stringów lub nawet stosowanie echo "$style";. Nie szkoda serwera?
  12. Prawie w każdym pliku występuje podwójne łącznie z bazą. Najpierw dołączany jest plik includes/db_connect.php, a potem includes/functions.php na którego początku jest dołączany includes/db_connect.php
  13. Masa obrazków leżących w katalogu głównym oraz includes mimo istnienia katalogu images
  14. Źle zaprojektowana baza danych - 45 tabel dla tak w sumie nieskomplikowanego skryptu mówi samo za siebie
  15. Totalnie niespójny desing. Wygląda to tak, jakby każda zakładka była robiona przez inną osobę. Poza tym nie ma to jak biały tekst na jasnożółtym tle (no kto tutaj coś widzi?)
  16. Krótka analiza zakładek z menu - kilka to biała strona, jedna to "coming soon!", inna to 404. Zabrakło natomiast linków w menu do tak mało istotnych zakładek jak np. panel admina.
  17. Skrypt wymaga do działania włączonej opcji short_open_tags
  18. Podatność na SQL Injection
  19. CSS rozbite na masę poszczególnych plików
  20. W wielu miejscach widać pozostałości albo podwaliny systemu do aktywacji użytkowników - nie jest on jednak w żaden sposób wykorzystywany.

Skrypt ma na pewno dużo więcej błędów i niedoróbek, których nie wypisałem w tym wpisie. Powyższa lista to tylko jego ogólny przegląd i pewnego rodzaju przestroga dla osób które chciałyby stawiać gry online na takich gotowcach. Szkoda czasu i nerwów na poprawianie takich pseudoskryptów - mówię to także z własnego doświadczenia ;)

Sądzę że w niedługim czasie mogę się pokusić o opisanie większej ilości skryptów tego typu.

Przepraszam też za ewidentną chaotyczność tego wpisu, był on pisany jeszcze podczas "badania" skryptu dlatego nowe rzeczy były dopisywane na bieżąco.

7 komentarzy do “Przegląd skryptów genialnych #2

  1. Thelleo pisze:

    Ciekawa ocena.
    Widzę, że jeżeli ktoś chce zrobić grę na darmowym silniku to bez jego modyfikacji daleko nie zajdzie :)
    A tak co do gier via WWW to planujesz kontynuować „Poradnik pisania gier MMO via WWW”?
    Bardzo chętnie poczytałbym twoje porady na ten temat.

    • Sobak pisze:

      Ja bym poszedł kawałek dalej i powiedział, że nie opłaca się modyfikować takich rozwiązań tylko naprawdę łatwiej będzie napisać coś własnego. Na pewno będzie się miało lepszą kontrolę nad kodem.

      Odnośnie „poradnika” (bo wypadałoby go zapisywać w cudzysłowach), to może faktycznie będę go kontynuować choć tego nie planowałem. Te dwa wpisy, a zwłaszcza pierwszy to był pewnego rodzaju apel do początkujących mający im uświadomić, że tworzenie takich gier nie jest tak banalne jak im się wydaje.

    • Sobak pisze:

      Ataki atakami, ale skrypt podatny na SQL Injection z hasłami w plaintexcie? Bez przesady, to aż się prosi o armagedon. A z serią słabo jak z całym blogiem, bo dużo czasu ostatnio pochłonęło kilka projekcików, powiedzmy i problemów życia codziennego :P

  2. Drraven pisze:

    Nie powiem, że współczuję bo jestem w siódmym niebie ostatnio i nie chce sobie tego kończyć ;D

    Jak wydam swojego bloga to go tutaj ocenisz. Ale z zewnątrz, czyli sam musisz odkryć jakie są kodowania itd. Przeglądać kod to nic trudnego. Trudniej jest odkryć go z zewnątrz ;)

    • Sobak pisze:

      Jak wydam swojego bloga to go tutaj ocenisz.

      Aha, dobrze wiedzieć :)

      Ale z zewnątrz, czyli sam musisz odkryć jakie są kodowania itd. Przeglądać kod to nic trudnego. Trudniej jest odkryć go z zewnątrz

      Do czego zmierzasz? Sugerujesz, że mam za łatwo, że oceniając kod PHP go widzę? Że mogę mieć dostęp do rzeczy którą oceniam?

      Ocenianie kodu PHP na podstawie kodu HTML? To totalnie bez sensu. To co najmniej tak jakbym patrząc na kogoś, oceniał jego babcię.

      Sprecyzuj o co Ci chodzi, bo jak na razie to mamy tu jeden wielki bełkot.

    • Nie wiem co ćpasz ale daj mi namiary do Twojego dostawcy. Może okaże się lepszy niż diller cebab‚a.

      Historia rodem z FAP FAP FAP. Wtedy spadłeś z łóżka i obudziłeś się dowiadując się, że miałeś straszną zmazę. Nie tutaj ale Ci dojedziemy na WebKrytyku jak tego tak bardzo pragniesz.

      Czekam na dalsza kontynuacje tej jakże ciekawej historii. Może powstanie z tego jakaś ciekawa bajka dla dzieci lepsza niż bob budowniczy i strażak Sam razem wzięci!

Dodaj komentarz

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