Zabezpieczneie aplikacji webowej

0

Robię aplikację na własny użytek, która składa się z frontendu (vue), backendu (spring) oraz bazy danych (mongodb). Całość stoi na VMce, gdzie "proces deploymentu" wygląda w ten sposób, że loguje się przez SSH, ręcznie pobieram nowego mastera i odpalam docker-compose build / up

Potrzebuje jednak zabezpieczyć dostęp do danych, które trzymam w aplikacji, jak wspomniałem - jest to tylko na użytek własny i nie ma tam jakiś wrażliwych danych osobowych, pytanie więc jakie jest minimum które muszę zrobić?

  • zabezpieczenie API - na start myślałem o prostej autentykacji za pomocą tokena JWT, generowanego na podstawie username/password
  • HTTPS? By powyższe miało sens, chyba warto by dane były szyfrowane?
  • Silne hasło na bazę danych - tutaj jeżeli ktoś dysponuje jakąś dokumentacja, to z chęcią bym poczytał jak to bezpiecznie przechowywać. To hasło musi trafić do docker-compose.yml a także do propertiesów aplikacji. Może naiwne pytanie, ale czy nie mogę takiego hasła po prostu wpisać w te dwa miejsca z poziomu SSH? Wtedy nie ma go w repo, jest tylko zapisane (plaintextem) w systemie VMki. Jeżeli ktoś dostanie się do niej to oczywiście je odczyta, jednak w takim przypadku i tak żadne hasło już chyba nie pomoże.
0
Gazel napisał(a):
  • zabezpieczenie API - na start myślałem o prostej autentykacji za pomocą tokena JWT, generowanego na podstawie username/password

Wszystko zależy od aplikacji. Jak robisz apkę, która wszystkim zwraca to samo to po co uwierzytelnianie. Jak to typowy CRUD, gdzie masz operacje write to jasne

  • HTTPS? By powyższe miało sens, chyba warto by dane były szyfrowane?

Tak samo jak wyżej, choć w tym wypadku po prostu zawsze lepiej mieć HTTPSa postawionego niezależnie co serwujesz

  • Silne hasło na bazę danych - tutaj jeżeli ktoś dysponuje jakąś dokumentacja, to z chęcią bym poczytał jak to bezpiecznie przechowywać. Wtedy nie ma go w repo, jest tylko zapisane (plaintextem) w systemie VMki. Jeżeli ktoś dostanie się do niej to oczywiście je odczyta, jednak w takim przypadku i tak żadne hasło już chyba nie pomoże.

Na pewno nie w repo. Jak masz jedną maszynę to po prostu ustaw wartości za pomocą zmiennych środowiskowych. Normalnie używa się rozwiązań takich jak https://aws.amazon.com/secrets-manager/ albo https://www.vaultproject.io/ . W twoim zastosowaniu to zdecydowanie za duże działo co do potrzeb

To hasło musi trafić do docker-compose.yml a także do propertiesów aplikacji. Może naiwne pytanie, ale czy nie mogę takiego hasła po prostu wpisać w te dwa miejsca z poziomu SSH?

Nie rozumiem. Jak tworzysz userów w bazie to to hasło tam będzie i tyle. Drugie miesce to propertiesty, w których użyłbym odwołania do zmiennej środowiskowej zdefiniowanej w docker-compose.yml w taki sposób https://www.baeldung.com/spring-boot-properties-env-variables

Jeśli wszystko stoi na jednym hoście to możesz się upewnić, że tylko aplikacja jest wystawiona na świat (a nie aplikacja i baza) co dramatycznie zmniejsza szansę na atak

0

@slsy:

Jeśli wszystko stoi na jednym hoście to możesz się upewnić, że tylko aplikacja jest wystawiona na świat (a nie aplikacja i baza) co dramatycznie zmniejsza szansę na atak

jak to mogę zrobić?

0
Gazel napisał(a):

Potrzebuje jednak zabezpieczyć dostęp do danych, które trzymam w aplikacji, jak wspomniałem - jest to tylko na użytek własny i nie ma tam jakiś wrażliwych danych osobowych, pytanie więc jakie jest minimum które muszę zrobić?

Minimum, to zrobienie tego dobrze. Czyli prawodłowo zabezpieczony dostęp, szyfrowanie danych podczas przesyłania, upewnienie się, że na zewnątrz VM'ki widać tylko port z API.

  • zabezpieczenie API - na start myślałem o prostej autentykacji za pomocą tokena JWT, generowanego na podstawie username/password

Dlaczego chcesz to robić samodzielnie o to jeszcze prawdopodobnie źle?
https://firebase.google.com/products/auth?gclid=Cj0KCQiAyMKbBhD1ARIsANs7rEGDjtQPwSmRbRPiFbFVE_MSXFPgF8WZprz0t7Foet4GSnyUDqFDqFoaAu4oEALw_wcB&gclsrc=aw.ds

  • HTTPS? By powyższe miało sens, chyba warto by dane były szyfrowane?

Trochę podstawa, ale nadal nie jest to wystarczająco dużo, żeby to wyżej miało sens.

  • Silne hasło na bazę danych - tutaj jeżeli ktoś dysponuje jakąś dokumentacja, to z chęcią bym poczytał jak to bezpiecznie przechowywać. To hasło musi trafić do docker-compose.yml a także do propertiesów aplikacji. Może naiwne pytanie, ale czy nie mogę takiego hasła po prostu wpisać w te dwa miejsca z poziomu SSH? Wtedy nie ma go w repo, jest tylko zapisane (plaintextem) w systemie VMki. Jeżeli ktoś dostanie się do niej to oczywiście je odczyta, jednak w takim przypadku i tak żadne hasło już chyba nie pomoże.

Najlepiej, to pobieranie hasła z jakiejś usługi do przechowywania sekretów podczas startu kontenera. Jak nie ma takiej możliwości, to zmienna środowiskowa w kontenerze przekazywana podczas startu kontenera.

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