Prośba o ocenę aplikacji

0

Dzień dobry wszystkim. Przygotowałem sobie małą aplikację do nauki języków obcych (pierwotnie miałbyć jeden konkretny język, ale udało się napisać to w taki sposób, że będę mógł to wykorzystywać do różnych języków). Nie jest to co prawda żaden projekt na zlecenie, ale nie jest to też projekt 'do szuflady'. Od momentu uzyskania pewnej stabilności regularnie z tego korzystam i się uczę :) Generalnie chcę powoli zacząć się rozglądać za pierwszą pracą lub stażem we frontendzie, ale najpierw chciałbym prosić o code review i opinię.
Javascript opierałem na ES6 (z wyjątkiem zastosowanej biblioteki leaflet), ten projekt ma być dla mnie poligonem do nauki czystego języka w tym standardzie.
Pełny opis dotyczący zastosowanych technologii i zaimplementowanych funkcjonalności można znaleźć na moim githubie: https://github.com/tomekadamczyk/lang-app

Link do aplikacji: http://lang-dev.tomekadamczyk.usermd.net/views/register/register.php
Do zalogowania się można skorzystać z 2 opcji:

  1. Logowanie do konta demonstracyjnego
    Login: demo,
    Hasło: admin1234
    Tutaj zastosowałem pewne ograniczenie - nie można dodawać nowych treści do bazy ani edytować istniejących.

  2. Utworzenie własnego konta - żadne dane osobowe jak imię czy mail nie są wymagane, wystarczy podać nowy login i ustawić hasło.

Każda opinia jest na wagę złota, krytyka również :) Z góry dziękuję za poświęcony czas

2
  1. Jak już się zarejestrowałem to powinno mnie cofnąć do logowania albo zalogować do systemu, a tak to muszę sam kombinować;
  2. Czemu w teście miałem dziesięć razy tłumaczyć jedno słowo? W kategorii czujki umieściłem słowo czujka i zamiast tylko jednego testu (no, bo tyle jest przecież słów) miałem ich dziesięć identycznych. Bez sensu trochę;
  3. Nie da się wywalić kategorii? Jeszcze rozumiem kategorię, w której są słówka ale pustą można wywalić od tak;
  4. Po najechaniu na kategorię, ikonka edycji jest tego samego koloru co zaznaczony wiersz;
  5. Przeglądarka nie pamięta, że już byłem zalogowany przez co, po zamknięciu karty, muszę logować się ponownie;
  6. Zarejestrowałem się na bardzo trywialne hasło, typu xxxyyy. System nie sprawdza złożoności;
  7. Nie parametryzujesz zapytań tylko szyjesz ręcznie stringi np: SELECT * FROM users WHERE username='$username' AND password='$password'. No chyba, że to tak działa w PHP ale wygląda jak ręcznie szyty string;
4

Do tego napisze osobny post. Zrobiłem Ci z powodzeniem SQL injecta więc nie korzystasz z parametrów.

Zobacz, wystarczy wpisać taką frazę jako nazwa użytkownika cokolwiek' or 1=1 limit 1; -- by się zalogować.

To koniecznie do poprawy.

Dowód, że się udało w załączniku, a tutaj źródło kłopotów: https://github.com/tomekadamczyk/lang-app/blob/fc908c0209303688a0c2a0dffde3e8aceb3e9f50/modules/class.account.php#L16

Podsumowując
Masz trochę rzeczy do poprawy ale spokojnie i konsekwentnie łataj kod, a zobaczysz, że wyjdzie z tego coś dobrego. Na plus: podoba mi się design, ponieważ bardzo lubię takie delikatne kolory. Miło się po tym klika.

0

Mi się w ogóle żadne słówka z bazy nie załadowały

0

@grzesiek51114: dziękuję za obszerną odpowiedź :)

  1. Jak już się zarejestrowałem to powinno mnie cofnąć do logowania albo zalogować do systemu, a tak to muszę sam kombinować;

Poprawię

  1. Czemu w teście miałem dziesięć razy tłumaczyć jedno słowo? W kategorii czujki umieściłem słowo czujka i zamiast tylko jednego testu (no, bo tyle jest przecież słów) miałem ich dziesięć identycznych. Bez sensu trochę;

Słowa w teście generowane są losowo z pełnej puli danego tematu. Jeśli jest jedno słowo, to wyświetlane będzie 10 razy. Pisząc to założyłem, że w słowniku użytkownik doda sobie wiele słów, więc losowanie słów będzie przebiegało sprawnie.

  1. Nie da się wywalić kategorii? Jeszcze rozumiem kategorię, w której są słówka ale pustą można wywalić od tak;

Usuwając kategorię, do której są już przypisane słowa robi się zamieszanie i sama edycja była lepszym wyjściem. Przyjrzę się jeszcze temu.

  1. Po najechaniu na kategorię, ikonka edycji jest tego samego koloru co zaznaczony wiersz;

Gdzieś mi to uciekło, poprawię.

  1. Przeglądarka nie pamięta, że już byłem zalogowany przez co, po zamknięciu karty, muszę logować się ponownie;

To mi nawet do głowy nie przyszło, spróbuję to ustawić (chociaż u mnie tego problemu nie ma - sprawdzę).

  1. Zarejestrowałem się na bardzo trywialne hasło, typu xxxyyy. System nie sprawdza złożoności;

Hasło ustawiłem na minimum 3 znaki i max 25 znaków. Nie zakładałem większej ilości warunków do spełnienia. Skoro jednak o tym wspominasz to poprawię.

  1. Nie parametryzujesz zapytań tylko szyjesz ręcznie stringi np: SELECT * FROM users WHERE username='$username' AND password='$password'. No chyba, że to tak działa w PHP ale wygląda jak ręcznie szyty string;

Tu nie za bardzo rozumiem o co chodzi, poszukam rozwiązania. Odnośnie injekta SQL - nie znałem tematu. Zbadam poczytam i zrobię tu co trzeba. Btw, wpisałem podaną przez Ciebie frazę w polu nazwy użytkownika, ale php wyrzuca mi błąd i nie mogę zreplikować tego co podesłałeś w załączniku.

Jeszcze raz dziękuję za odzew i za czas :)

0
pavarotti napisał(a):

Mi się w ogóle żadne słówka z bazy nie załadowały

Na koncie demo czy zakładałeś nowe?

0
TomekAd napisał(a):
pavarotti napisał(a):

Mi się w ogóle żadne słówka z bazy nie załadowały

Na koncie demo czy zakładałeś nowe?

Zakładałem nowe konta.

1

Nie chce sie czepiac :), ale backend jest raczej calutenki do przerobienia. Fajna aplikacja, ale jakis porzadek by sie na pewno przydal :).

1

@TomekAd:

Tu nie za bardzo rozumiem o co chodzi, poszukam rozwiązania. Odnośnie injekta SQL - nie znałem tematu. Zbadam poczytam i zrobię tu co trzeba. Btw, wpisałem podaną przez Ciebie frazę w polu nazwy użytkownika, ale php wyrzuca mi błąd i nie mogę zreplikować tego co podesłałeś w załączniku.

Działa, działa. Popatrz: http://recordit.co/ILqR44t4FF

Jeśli nie działa to dołóż spację po --, bo to może mieć znaczenie jak interpretowany jest komentarz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1