Patrząc na strukturę większości witryn opartych na PHP / MySQL, które widziałem, wydaje się, że nie jest strasznie trudno rozpoznać hasło do bazy danych, jeśli trochę kopiesz, ponieważ zawsze jest plik instalacyjny lub konfiguracyjny, w którym przechowywane są informacje do logowania do DB. Jakie są inne opcje poza podstawowymi środkami ostrożności, aby upewnić się, że uprawnienia mojej bazy danych są odpowiednio ograniczone w przypadku zdalnych żądań, które mógłbym wdrożyć we własnych projektach w celu ochrony tych informacji?
18
Odpowiedzi:
Nie jest to bezpośrednia odpowiedź na temat przechowywania haseł, ale generalnie używam co najmniej dwóch połączeń z bazą danych podczas tworzenia aplikacji internetowych - jedno z nich wykorzystuje 99% czasu na działania związane z użytkownikami, z ograniczonymi uprawnieniami, a drugie służy do funkcji administratora (usuń użytkowników itp.).
W kilku przypadkach, w których instaluję pakiet innej osoby, zainstaluję dwie instancje ... instancję publiczną, która ma dostęp tylko do bazy danych, aby wykonywać ogólne czynności związane z typem użytkownika, a drugą instancję ograniczoną do adresu IP moja lokalna podsieć (być może nawet na innym komputerze), która musi być używana do wszelkich działań typu „admin”. Żaden z nich nie ma dostępu do modyfikowania tabel itp. Wolę jednak korzystać z rodzimych narzędzi bazy danych, niż pozwolić aplikacji internetowej na uruchamianie własnych zadań aktualizacji, które nie zostały jeszcze sprawdzone.
Możesz jednak pójść o krok dalej i dodać więcej połączeń specjalnie dla danych zadań ... więc zadania tworzenia i zarządzania hasłami przechodzą przez użytkownika, który ma dodatkowe uprawnienia w tabelach użytkowników, logowanie ma uprawnienia do uwierzytelniania bazy danych i niewiele więcej itd.
W ten sposób, jeśli dojdzie do ataku polegającego na wstrzyknięciu sql, na większości stron internetowych nie jest w stanie zrobić nic znaczącego - nie widzi skrótów haseł, nie może dodać nowego użytkownika administratora (nie to, że byłby w stanie to zrobić cokolwiek zresztą), itp. To nadal nie pomoże, jeśli uda im się zdobyć powłokę na twoim komputerze, ale spowolni je.
źródło
Używaj haseł jednorazowych , Kerberos , LDAP lub czegokolwiek innego do przechowywania danych konta i uwierzytelniania / autoryzacji użytkowników. Usługi katalogowe są dobrym sposobem do przechowywania informacji o użytkowniku i używania ich jako zaplecza danych konta.
źródło
Jestem wielkim fanem używania uwierzytelniania „Ident” PostgreSQL na lokalnych gniazdach, kiedy tylko mogę. W ten sposób lokalni użytkownicy są mapowani bezpośrednio do użytkowników komputerów lokalnych w systemie Unix / Windows i nie muszę się martwić o przechowywanie haseł. Jednak nie sądzę, że jest to jeszcze opcja w MySQL.
Tam, gdzie baza danych i serwer WWW znajdują się na dwóch osobnych komputerach, używam haseł MD5 przez SSL: jeśli wrogi ma dostęp do mojego serwera frontendowego, to tylko kwestia czasu, zanim zorientuje się, jak komunikuje się z bazą danych.
źródło
Jeśli korzystasz z .NET Framework, możesz zajrzeć za pomocą zaszyfrowanych parametrów połączenia. Nie wiem, czy coś takiego jest możliwe w innych językach / ramach, ale byłoby to kolejnym zabezpieczeniem, aby upewnić się, że twoje połączenia nie zostaną naruszone.
Oprócz korzystania z zaszyfrowanych parametrów połączenia, używanie LDAP / Kerberos / Active Directory będzie najbezpieczniejszą opcją.
źródło
Jeśli twoje hasła są zapisane jako zwykły tekst, użyj skrótów (MD5, SHA), Luke!
źródło
W zależności od języka programowania możesz zaszyfrować dane logowania, ale jeśli używasz języka zinterpretowanego, nie ma sposobu, aby upewnić się, że ktoś nie będzie w stanie odczytać poświadczeń, jeśli uzyska dostęp do systemu.
Jeśli korzystasz z C ++ lub podobnego, polecam utworzenie / znalezienie solonej funkcji szyfrowania / deszyfrowania i uruchomienie poświadczeń przez nią i zapisanie wynikowego skrótu jako pliku w systemie.
Jeśli korzystasz z PHP lub podobnego, radzę napisać opakowanie dla
mcrypt_encrypt()
i posolić poświadczenia, a następnie uruchomić zaciemnianie kodu, aby spowolnić hakerów, jeśli uzyskają dostęp do systemu.źródło