• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

zabezpieczanie baz danych PHP

0 głosów
267 wizyt
pytanie zadane 18 września 2019 w Sieci komputerowe, internet przez Layoutowiec Mądrala (5,470 p.)
Witam wszystkich!

Zaczynam ten wątek ponieważ nasuwa mi się kilka pytań i wątpliwości... W sieci możemy znaleźć wiele stron na których zarejestrowanych jest mnóstwo użytkowników. Sam na swojej stronie planuje zrobić możliwość "wpisania" się do bazy danych za pomocą logowania przez gmail'a. Jednak w jaki sposób można zabezpieczyć takie bazy danych na wszelkie możliwe sposoby aby mieć pewność że nikt się do nich nie włamie. O czym należy poczytać czego się nauczyć? Jak sprawdzić czy nie ma sposobu aby dostać się do bazy danych jako  "nieproszony"gość.

Na moje wątpliwości wpływ miała także niedawna sytuacja w której wyciekły faktury użytkowników sieci partnerskich GetHero oraz GAMELLION.

Dziękuję za poświęcony czas

3 odpowiedzi

+2 głosów
odpowiedź 18 września 2019 przez Chess Szeryf (76,770 p.)
wybrane 18 września 2019 przez Layoutowiec
 
Najlepsza
Nie da się całkowiecie zabezpieczyć przed "włamaniem się do bazy danych". Można jedynie utrudnić to pewnej grupie użytkowników. Żeby potencjalne zagrożenie wycieku danych z bazy przezornie zabezpieczyć powinieneś stosować się do zasad, które normalizują to zjawisko, czyli powodują, że coś takiego w bardzo krótkim czasie jest prawie niemożliwe ze względu ograniczeń czasowych jak i technologicznych.

Powinieneś zatem śledzić najnowsze i najstabilniejsze funkcje do haszowania haseł i innych kryptograficznych funkcjonalności i implementować je we własnym systemie - zastępować je w miejsce starych instrukcji. Najlepiej jeszcze czytać odpowiednie artykuły, które mówią o tym zagadnieniu, żeby uciekać się do tego, co jest naprawdę w miarę sensowne i bezpieczne z punktu widzenia bezpieczeństwa.

Kroki, które powinno się podjąć, by przeciwdziałać atakom na własne strony WWW i nie tylko, to:

- "bindowanie" - wiązanie danych, które są wysyłane do parsera oddzielnie, zapobiega to w dużej mierze takim atakom jak SQL Injection. Należałoby też poczytać o słabych punktach takiego zastosowania, bo nic nie zostaje bez konsekwencji, coś za coś.

- nie ufanie każdym przychodzącym danym do serwera. Wszystkie dane, a to wszystkie powinny być odpowiednio spreparowane, przefiltrowane i w takiej formie powinny trafić do najbardziej newralgicznych miejsc po stronie back-endu.

- sprawdzanie zapytań SQL pod kątem podatności na "zamulenie" odczytu danych z bazy i nie tylko. Niepoprawnie napisane zapytanie może przysporzyć wiele i to naprawdę wiele kłopotów.

- zabezpieczenie sesji, napisanie jej w miarę unikalnej po stronie serwera jak i front-endu, jeśli front-end, np. cookies korzystają z takiego rozwiązania, a nawet jeśli front nie korzysta z sesji, to także trzeba wziąć pod uwagę atak na sam back-end.

- testowanie napisanego systemu, testy automatyczne i manualne, żeby czasem się nie okazało, że jest jakaś luka.

Na koniec dodam, jak wszyscy wiedzą powinno się pisać także czysty kod, aby był czytelny dla nas i dla innych. Wyeliminuje to zapewne większość błędów na etapie produkcji.

Ostatnia wzmianka o której wspomnę, to jest to, że "końcowym korzystającym z danego produktu jest sam użytkownik" - Gynvael Coldwind o tym mówił na którymś streamie. Czyli nic się nie da do końca uchronić przed niejakimi atakami na produkt, który finalnie trafia do nas użytkowników. Są to, np. cheaty do gier (oszustwa) i nic się z tym nie zrobi. Były, są i będą takie rozwiązanie stosowane przez niektórych. Funkcje kryptograficzne rozkodowujące np. sesję z PHP, która jest wykorzystywane przez cookies po stronie przeglądarki (front-end). Takie przykłady można by mnożyć.
+1 głos
odpowiedź 18 września 2019 przez Comandeer Guru (571,380 p.)

100% sposobu nie ma, ale na pewno:

  • Hasła powinny być hashowane silnym algorytmem (pokroju Argon2 czy bcrypt/scrypt).
  • Można zastosować szyfrowanie tablic (MySQL ma coś takiego, AFAIR Postgres też; pozostałe systemy raczej też powinny to wspierać natywnie albo w formie jakiegoś rozszerzenia).
  • Baza powinna być dostępna tylko z poziomu localhosta.
  • No i nie obraziłaby się za własny kontener.
  • Dodatkowo użytkownik, którego używamy z poziomu aplikacji, powinien mieć uprawnienia tylko do tego, do czego musi. Zatem tworzenie tabel odpada, jedynie uprawnienia do odczytu i zapisu danych.
  • Trzeba się chronić przed wprowadzaniem do bazy złośliwych danych. W przypadku SQL służy do tego mechanizm prepared statements. W przypadku innych baz  na pewno też są odpowiednie mechanizmy.
0 głosów
odpowiedź 18 września 2019 przez Artek Stary wyjadacz (11,820 p.)
Może nieco bardziej ogólnie.

1.Szczególną uwagę zwracaj na wszelkie dane pobierane od użytkowników - mogą one być źródłem złośliwego kodu, lub innego ataku. Informacje, pliki od użytkowników są winne dopóki nie udowodnią, że jest inaczej.

2. W celu zwiększenia bezpieczeństwa rozważ wykorzystanie jakiegoś dobrego framework'a. Posiada zestaw sprawdzonych rozwiązań, również w zakresie bezpieczeństwa.

3.Wrażliwe dane np. hasło przechowuje się w bazie danych w postaci zaszyfrowanej - tak, że jeżeli ktoś się włamie to i tak nie wykorzysta zdobytych danych.
komentarz 18 września 2019 przez Layoutowiec Mądrala (5,470 p.)

I zastosowując się do tych metod jak np. szyfrowanie haseł nie ma się czego obawiać ? 

1.Szczególną uwagę zwracaj na wszelkie dane pobierane od użytkowników - mogą one być źródłem złośliwego kodu, lub innego ataku. Informacje, pliki od użytkowników są winne dopóki nie udowodnią, że jest inaczej.

Czy mógłbyś powiedzieć coś więcej na ten temat/ podrzucić coś ? 

komentarz 18 września 2019 przez Artek Stary wyjadacz (11,820 p.)
Atak XSS, MySQL inject, Wgrywanie na serwer pliku ze złośliwym kodem PHP
komentarz 18 września 2019 przez Artek Stary wyjadacz (11,820 p.)

I zastosowując się do tych metod jak np. szyfrowanie haseł nie ma się czego obawiać ? 

100% pewności raczej nigdy nie ma. 

komentarz 18 września 2019 przez Comandeer Guru (571,380 p.)

Przechowywanych haseł nie powinno się szyfrować, a hashować. Szyfrowanie zakłada, że da się to odszyfrować. To znaczy, że właściciel strony miałby dostęp do haseł użytkowników. A że użytkownicy używają tych samych haseł w różnych miejscach, resztę chyba można sobie dopowiedzieć. Poza tym skoro nawet my nie potrafimy odczytać haseł użytkowników, włamywacz też nie będzie umiał.

Podobne pytania

+1 głos
2 odpowiedzi 135 wizyt
pytanie zadane 3 kwietnia 2021 w JavaScript przez Jakub 0 Pasjonat (23,100 p.)
+1 głos
3 odpowiedzi 437 wizyt
0 głosów
2 odpowiedzi 672 wizyt
pytanie zadane 5 września 2018 w C i C++ przez Archeon Początkujący (480 p.)

88,677 zapytań

137,288 odpowiedzi

306,652 komentarzy

58,873 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...