Czy dane w pliku properties sa bezpieczne? Spring Boot

Czy dane w pliku properties sa bezpieczne? Spring Boot
ST
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 2 lata
  • Postów:75
0

Witajcie, pisze aplikacje (Spring Boot) ktora docelowo bedzie smigala na Amazonie - Elastic Beans,
w niej mam plik application.properties (ten defaultowy generowany wraz z projektem przez initializr),
w tym pliku mam haslo do bazy danych i wiadomo reszte roznych configow.

Pytanie, czy takie rozwiazanie jest bezpieczne?
Czy jest jakas mozliwosc ze ktorys z uzytkownikow apki dobierze sie do tych poufnych danych?

DonStefano
  • Rejestracja:około 3 lata
  • Ostatnio:ponad rok
  • Postów:36
0

"Czy jest jakas mozliwosc ze ktorys z uzytkownikow apki dobierze sie do tych poufnych danych?" - jeśli jedynie w propertiesach umieszczasz te dane oraz manualnie z nich nie korzystasz w aplikacji, to przecież użytkownik nie będzie miał do nich dostępu przez aplikację.

System jest bezpieczny na tyle, na ile bezpieczne jest jego najsłabsze ogniwo, często nie ma sensu brnięcie w security through obscurity w miejscach gdzie nie jest to konieczne.
Jeśli ktoś dostanie się do środka maszyny fizycznej, to naturalnie będzie miał dostęp do tych danych.
Istnieją rozwiązania, które umożliwiają szyfrowanie propertiesów (np. Jasypt dla aplikacji javowych), ale w dalszym ciągu trzeba skonfigurować użycie klucza szyfrującego, który gdzieś się musi znajdować.

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

To zależy. Jak np publicznie masz tam wystawiony /actuator z którego można czytać properties to niekoniecznie (chociaż spring akurat gwiazdkuje hasła :P). Ale w normalnej sytuacji nie da się do tego pliku dostać bez jakiejś podatności bezpieczeństwa.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
Charles_Ray
  • Rejestracja:prawie 17 lat
  • Ostatnio:około 5 godzin
  • Postów:1873
0

Inna dyskusja, ale gdzie trzymasz hasła do proda? W gicie?


”Engineering is easy. People are hard.” Bill Coughran
Koziołek
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:Stacktrace
  • Postów:6821
7

Krótko – nie. Ten plik nie powinien zawierać haseł. Ma on dziwną właściwość przeciekania do przestrzeni publicznej.

Poprawne rozwiązanie to wykorzystanie mechanizmu zmiennych środowiskowych zarządzanych z poziomu chmury. Wtedy hasła są przekazywane do instancji z zewnątrz. W pliku będziesz miał coś w rodzaju

Kopiuj
spring.datasource.url = ${OPENSHIFT_MYSQL_DB_HOST}:${OPENSHIFT_MYSQL_DB_PORT}/"nameofDB"
spring.datasource.username = ${OPENSHIFT_MYSQL_DB_USERNAME}
spring.datasource.password = ${OPENSHIFT_MYSQL_DB_PASSWORD}

i tyle


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
edytowany 1x, ostatnio: Koziołek
DM
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 12 godzin
  • Postów:220
0

Rozwiązanie ze zmiennymi działa, jednak cały czas zostaje problem Actuatora gdzie możesz swoje hasła udostępnić przez /env endpoint-a. Problem, jest taki, że endpointy/configi zmieniają się czasami razem z wersjami Springa i można sobie narobić problemów. Jeżeli, chcesz używać zmiennych to upewnij się, że /env (Jakkolwiek by się nie nazywał) jest zablokowany(domyślne). Upewnij się też, że config keys-to-sanitize jest dobrze ustawiony (https://stackoverflow.com/questions/28300232/spring-boot-actuator-hides-property-values-in-env-endpoint).

Alternatywą w AWS jest np IAM role do Secret Manager i konkretnego secreta i wyciągać hasła stamtąd. Możesz, też użyć jakiegoś Spring Cloud Config (Tylko bez refresha :) ), jednak wtedy możesz spotkać się z takim samym problemem jak wyżej. (W zależności od implementacji, i źródła secretow).

edytowany 1x, ostatnio: dmw
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

Jeżeli, chcesz używać zmiennych to upewnij się, że /env (Jakkolwiek by się nie nazywał) jest zablokowany

Ja bym jednak zrobił to sensowniej i postawił /actuator na innym porcie, który w ogóle nie jest publicznie widziany za load balancerem czy reverse proxy, czyli ustawić odpowiednio springowe management.server.port. Wtedy możemy sobie wystawić actuatorem co nam potrzebne.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
DM
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 12 godzin
  • Postów:220
0

Dla mnie endpointy, z których można wyciągnąć jakiekolwiek secrety powinny być zablokowane. Regresja może się zdarzyć na poziomie Springa(Zmiana configu itd.), ale może zdarzyć się też na poziomie LB/RP. Połączenie tych 2 rozwiązań wydaje się optymalne.

piotrpo
  • Rejestracja:ponad 7 lat
  • Ostatnio:dzień
  • Postów:3277
0

Masz hasła w pliku priperties, który leży w jakimś artefakcie, który lezy na jakimś serwerze artefaktów, każdy kto ma dostęp do tego serwera i zip'a ma dostęp do produkcyjnej bazy danych. Na AWS musisz mieć jakieś dedykowane rozwiązanie do trzymania sekretów, albo umożliwiać np. połączenie do bazy danych bez użycia hasła, ale tylko z odpowiedniej usługi. Nie używałem nigdy tej chmury.

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

@dmw

  1. Jak masz "regresje na LB" i nagle wystawiasz na swiat prywatne API, to myślę że juz musztarda po obiedzie, bo równie dobrze może to oznaczać ze upubliczniliśmy jakiś intranetowy admin interface ;)
  2. actuator ma wiele endpointów które mogą być bardzo przydatne i wygodne, ale jednocześnie mogą potencjalnie być niebezpieczne -> np. http trace (który może leakować tokeny i cookie) czy heapdump (który na dobrą sprawę leakuje wszystko). Nie mówiąc już o jakichś customowych endpointach które można tam dodać. Nie jestem pewien czy podejście zaorać actuatora to nie jest wylewanie dziecka z kąpielą.

"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
99xmarcin
  • Rejestracja:prawie 5 lat
  • Ostatnio:4 miesiące
  • Postów:2420
0

Poczytaj o tym produkcie: https://www.vaultproject.io/


Holy sh*t, with every month serenityos.org gets better & better...
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)