Zasady bezpieczeństwa PHP i MySQL

Kiedy poznamy język PHP, zasady tworzenia baz danych i bardziej skomplikowane zapytania MySQL nie można oprzeć się wrażeniu że o projektowaniu aplikacji wiemy niemal wszystko i jesteśmy w stanie zaprojektować drugiego Facebooka od czystej kartki. Należy pamiętać, że wraz ze wzrostem skali przedsięwzięcia należy włożyć adekwatny nacisk na bezpieczeństwo aplikacji.

Pierwszym powodem jest po prostu nieprzewidywalność działań użytkownika. Chodzi o to, że aplikacje skierowane dla szerokiej publiki muszą być „idiotoodporne”.

Drugim poważniejszym zagrożeniem dla naszych internetowych arcydzieł są celowe działania wandali. Tutaj z całą powagą powiem, że im większą paranoję mamy na tym punkcie, tym lepiej. Musimy zakładać, że wiele osób i to często znacznie bardziej doświadczonych od nas będzie chciało się popisać. Przedstawiam listę kilku zasad, dzięki którym będziemy wstanie stworzyć aplikację odporną na ataki i zapewniającą integralność danych.

Zasada nr 1: Sprawdzaj wprowadzane dane

Nie ważne czy użytkownik wybiera datę, wpisuje imię czy publikuje komentarz. Zawsze sprawdzaj wprowadzane dane pod kątem potencjalnie groźnych wyrażeń po stronie serwera np. za pomocą funkcji preg_match(). Pamiętaj, że walidacja po stronie Front-Endu pełni rolę jedynie pomocy i ułatwienia dla użytkownika.

Nieprzestrzeganie tej zasady grozi atakiem SQL Injection. Tutaj fajnie jest pokazane jak łatwy do przeprowadzenia jest tego typu atak

Zasada nr 2: Kontrola dostępu

Udostępniaj zasoby i foldery zgodnie z zasadą „niech każdy ma dostęp wyłącznie do tych zasobów, które są mu niezbędne”.

Zasada nr 3: Ochrona sesji

Kradzież identyfikatora sesji może stanowić poważny problem. Mimo, że nie można matematycznie uniemożliwić tego procederu, można to nieco utrudnić. Z pomocą przychodzą funkcja session_regenerate_id() oraz szyfrowanie SSL.

Zasada nr 4: Zawsze aktualizuj systemy

Twój serwer pozwala włączyć wyższą wersje PHP? Zrób to. Twój serwer z bazą danych obsłuży nowszą wersję MySQL? Wykorzystaj ją. Zawsze korzystaj z najnowszych wersji. Nie dość, że aplikacja będzie bezpieczniejsza, w większości przypadków będzie także bardziej wydajna i szybsza.

Zasada nr 5: Ukryj ostrzeżenia i szczegóły o błędach w wersji produkcyjnej

Z błędów i ostrzeżeń, które pojawiają się np. w wyniku niedociągnięcia lub przypadku, którego nie wziąłeś pod uwagę można dowiedzieć się wiele o twoim programie i poziomie doświadczenia. Im więcej o tobie i budowie aplikacji wie potencjalny intruz, tym gorzej.

Zasada nr 6: Uważaj na dynamicznie generowane zapytania MySQL

Trochę się łączy z Zasadą nr 1 ale w przypadku gdzie zaprojektowałeś jakiś filtr, który ma opcjonalne pola uważaj aby nie iść na łatwiznę i nie sklejać stringu z zapytaniem bezpośrednio z danych pochodzących z formularzy.

Zasada nr 7: Nie zostawiaj bałaganu

Tworzenie kopii plików źródłowych to dobra praktyka. Usuń je i przenieś w bezpieczne miejsce kiedy publikujesz aplikację. Nie tylko ty używasz podkreślenia: „_admin.php” 🙂 lub „admin.php_”. Zauważ, że w drugim przykładzie kod będzie czytelny z poziomu przeglądarki.

Zasada nr 8: Szyfruj hasła i wrażliwe dane

Nie zapisuj wrażliwych danych jako zwykły tekst w bazie czy pliku. Jeżeli w jakieś aplikacji tworzysz funkcję „przypomnij hasło” i chcesz aby wysyłało się ono na email użytkownika, daj sobie spokój z tworzeniem Back-Endu… jest tyle różnych fajnych zajęć…

Zasada nr 9: Z rozwagą używaj metody GET

Na największy banał wpadłem pod koniec. Nawet nie masz pojęcia ile razy mogłem spokojnie czytać dane o zamówieniach innych użytkowników zmieniając id w takim oto adresie: store/orders?id=314159

Podsumowanie

Jest różnica pomiędzy: Potrafię napisać działającą aplikację… a: Potrafię zaprojektować aplikację i wiem jak ją zabezpieczyć przed atakami. Twórz aplikacje o zastosowaniu biznesowym i oferuj tworzenie komercyjnych projektów w momencie jeżeli bliżej Ci do tego drugiego stwierdzenia. Nie chcę straszyć ale w przeciwnym wypadku, czeka cię niezła lekcja.

Zasady bezpieczeństwa PHP i MySQL
4.67 (93.33%) głosów: 33