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

zabezpieczanie baz danych PHP

VPS Starter Arubacloud
0 głosów
444 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,710 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 (599,730 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,800 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,800 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,800 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 (599,730 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 203 wizyt
pytanie zadane 3 kwietnia 2021 w JavaScript przez Jakub 0 Pasjonat (23,120 p.)
+1 głos
3 odpowiedzi 1,187 wizyt
0 głosów
0 odpowiedzi 97 wizyt
pytanie zadane 10 listopada 2023 w C i C++ przez filip142 Nowicjusz (120 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...