Bezpieczeństwo połączenia z bazą

0

Gdy mamy connectiona do bazy i sie polaczy w trybie wizualnym, to po skompilowaniu ResHack pokaze wszystkie parametry.

I pytanie: czy jesli w OnCreate wpisze te parametry kodem, to czy jest to w miarę bezpieczne ? Latwo takie cos wykryc przy disaemblacji ?
Czy lepiej trzymac wersje zaszyfrowaną usera i haslo, i w OnCreate przypisac odszyfrowaną nazwe ? Oczywiscie klucz tez by byl na stałe wpisany.

0

Lepiej mieć zaszyfrowane, aczkolwiek jeśli to ważny program, to zdolny informatyk odzyska hasło przez disassemblację. Najlepiej zrobić aplikację trójwarstwową i część serwerową z hasłami trzymać na serwerze, który jest odległym komputerem.

0

jeśli usera i hasło do bazy będziesz miał zapisanego w programie to zawsze można je odzyskać - czy się komuś to uda czy nie zależy tylko od Twoich umiejętności oraz jego determinacji

0

Generalnie temat jest bardzo ciekawy. Spotkałem się z tym problemem już niejednokrotnie pisząc niewielkie aplikacje, które łączyły się do bazy danych.
Z profesjonalnego punktu widzenia powinno być tak jak pisze @Mariusz - warstwa dostępu i haseł powinna się znajdować na serwerze. Moje dotychczasowe rozwiązania zapewniające bezpieczeństwo jakie stosuje na dziś dzień to:

  • autentykacja użytkownika na podstawie konta domenowego (polecana przeze mnie ale nie zawsze możliwa)
  • dla aplikacji, które nie koniecznie muszą modyfikować jakieś dane czy generalnie o mniejszym znaczeniu tworzę usera w bazie o nazwie readonly czy coś w tym stylu i daje dostęp do pojedynczych widoków
  • każdy user dostaje swój login i hasło i musi sobie je wbić do głowy :) jak będzie jakiś nieautoryzowany dostęp to wiadomo kogo zwolnić ;) albo komu wykradziono hasło.

Zaszywanie hasła w aplikacji (w jakikolwiek sposób) nie daje prawie żadnego zabezpieczenia.

0

Bezpieczeństwo aplikacji to fikcja. Cokolwiek byś nie zrobił Twoja aplikacja musi połączyć się z bazą, aby tego dokonać potrzebne jest przekazanie odpowiednich informacji.
Hasła możesz kodować, ukrywać, autoryzować użytkowników ale co z tego?
Przez ułamek sekundy i tak będziesz musiał rozszyfrować hasło a co za tym idzie będzie istniało sobie gdzieś w pamięci procesu i co byś nie zrobił zawsze znajdzie się metoda żeby się do tego miejsca dogrzebać.
Jedyne co możesz zrobić to utrudnić zadanie osobie, która miałaby ewentualny interes w wydobyciu potrzebnych jej danych.
Sukces osiągniesz tylko wtedy gdy zdobycie informacji będzie odbywało się większym nakładem pracy (większymi kosztami) niż warta jest sama informacja.

0

Cokolwiek byś nie zrobił Twoja aplikacja musi połączyć się z bazą

Fałsz - jest coś takiego jak Middleware / architektura 3-warstwowa

Przez ułamek sekundy i tak będziesz musiał rozszyfrować hasło...

Fałsz - Logowanie za pomocą NTLM

Sukces osiągniesz tylko wtedy gdy zdobycie informacji będzie odbywało się większym nakładem pracy (większymi kosztami) niż warta jest sama informacja.

Smutne ale prawdziwe :)

0

Architektura 3-warstwowa raczej odpada.
System musi dzialac w sieci, bez dostepu do neta.
I w tej sieci nie bardzo mam wplyw co sie dzieje. Po prostu poinstalowalem bazy, ale hasel dostepu nie dalem do baz.
Obawiam sie, ze beda chcieli rozgryzc strukture... Poki co, spakowalem exeka, zeby bezposrednio nie doszukali sie jakichs informacji.

0
papudrun napisał(a)

Cokolwiek byś nie zrobił Twoja aplikacja musi połączyć się z bazą

Fałsz - jest coś takiego jak Middleware / architektura 3-warstwowa
no i??? Do tej warstwy pośredniej też się musisz jakoś zalogować, też musisz jakoś "prowadzić z nią dialog". O ile w przypadku aplikacji wielowarstwowej dużo prościej jest uniemożliwić postronnej osobie np. skasować dane o tyle odczytać dane może już niemal tak samo łatwo jak przy aplikacji CS - jedynie trzeba trochę wysiłku aby rozpracować protokół.

Przez ułamek sekundy i tak będziesz musiał rozszyfrować hasło...
Fałsz - Logowanie za pomocą NTLM
a czy wiąże się to z tym, że nie ma żadnych haseł? user jest identyfikowany po sposobie pisania czy jak??? Generalnie zawsze trzeba podać hasło - czy to tekstowo, czy odcisk palca, skan siatkówki czy inne cuda. I nie ma się co oszukiwać - najsłabszym ogniwem jest człowiek - dużo prościej jest po prostu wydobyć hasło od usera lub je "zgadnąć" niż zajmować się grzebaniem w kodzie aplikacji.

Databasis napisał(a)

Obawiam sie, ze beda chcieli rozgryzc strukture...
a to jest herezja - czyżbyś w tej strukturze wymyślił coś tak rewolucyjnego, że boisz się, że ktoś ukradnie Ci pomysł??? BTW w wielu normalnych systemach sama struktura bazy wręcz musi być znana - choćby po to aby móc połączyć ją z innymi aplikacjami czy też żeby można było tworzyć dowolne zestawienia i analizy. Oczywiście za taki przywilej klient odpowiednio płaci i dodatkowo podpisuje świstek, że jak sobie sam zepsuje to za naprawę będzie musiał grubą kasę zapłacić. To w większości przypadków odstrasza domorosłych ulepszaczy kodu, a ci co są w mniejszości szybko, zazwyczaj po pierwszej awarii, przechodzą do większości. Jest jeszcze jeden ważny argument - każda baza żyje - rozrasta się, zmieniają się dane. To co było dobre i wydajne przy 1k rekordów zazwyczaj przestaje zadowalać przy 1kk rekordów i trzeba zmienić indeks, podrasować krytyczne zapytania itp. Kto mi zagwarantuje, że gość który pisał aplikację za rok będzie jeszcze żył? albo że np. nie wygra w totka i będzie miał system w d****</quote>

0

no tu chodzi o to, zebym ja byl stale potrzebny. Jak poznaja strukture, moge stwierdzic ze help-desk bedzie niepotrzebny , albo sie odezwa wtedy gdy bedzie to konieczne. A mi zalezy na tym, zeby byli uzaleznieni ode mnie ;-P

0
Databasis napisał(a)

Architektura 3-warstwowa raczej odpada.
System musi dzialac w sieci, bez dostepu do neta.
I w tej sieci nie bardzo mam wplyw co sie dzieje. Po prostu poinstalowalem bazy, ale hasel dostepu nie dalem do baz.
Obawiam sie, ze beda chcieli rozgryzc strukture... Poki co, spakowalem exeka, zeby bezposrednio nie doszukali sie jakichs informacji.

Poczytaj sobie o technikach utrudniających debuggowanie aplikacji.
Polecam blog gynvela'a http://gynvael.coldwind.pl/

0

Jeśli się boimy że ktoś podsłuchuje pakiety w sieci lokalnej (z możliwością przechwycenia haseł), to można na przykład zrobić aplikację internetową z połączeniem przez SSL.

0
Mariusz Jędrzejowski napisał(a)

Jeśli się boimy że ktoś podsłuchuje pakiety w sieci lokalnej (z możliwością przechwycenia haseł), to można na przykład zrobić aplikację internetową z połączeniem przez SSL.
znaczy, że zwykła aplikacja nie może się po SSL łączyć z bazą?? Ciekawe ...

0
Misiekd napisał(a)
papudrun napisał(a)

Cokolwiek byś nie zrobił Twoja aplikacja musi połączyć się z bazą

Fałsz - jest coś takiego jak Middleware / architektura 3-warstwowa
no i??? Do tej warstwy pośredniej też się musisz jakoś zalogować, też musisz jakoś "prowadzić z nią dialog".
</quote>

Dzięki middleware nie ma dostępu do bazy danych a do interfejsu, więc jeśli nawet komuś uda się zdobyć hasło nie będzie miał dostępu do bazy. Poza tym się zgadzam z Tobą.

0

Przechwycenie loginu i hasła przesyłanego od klienta do warstwy środkowej umożliwi zalogowanie na serwer bazy danych z użyciem tajnego hasła zapisanego w warstwie środkowej i nieupoważniony dostęp do bazy danych. Lepiej jest zaszyfrować całą transmisję między klientem i warstwą środkową. Przypuszczalnie łatwiej jest to zrobić stosując aplikację internetową. Poza tym teraz często stosuje się aplikacje internetowe z prostego powodu. Nie potrzebujesz instalować kilkunastu programów żeby dostać się do kilkunastu baz danych, wystarczy że masz przeglądarkę internetową.

0
Mariusz Jędrzejowski napisał(a)

Przechwycenie loginu i hasła przesyłanego od klienta do warstwy środkowej umożliwi zalogowanie na serwer bazy danych z użyciem tajnego hasła zapisanego w warstwie środkowej

W jaki sposób klient przejmie tajne hasło bazy danych znajdujące się w warstwie środkowej skoro nie ma do tej warstwy dostępu? Na tym przecież polega cała idea tworzenia takiego warstwowego systemu aby klient miał dostęp tylko do najniższej warstwy.

0
papudrun napisał(a)
Mariusz Jędrzejowski napisał(a)

Przechwycenie loginu i hasła przesyłanego od klienta do warstwy środkowej umożliwi zalogowanie na serwer bazy danych z użyciem tajnego hasła zapisanego w warstwie środkowej

W jaki sposób klient przejmie tajne hasło bazy danych znajdujące się w warstwie środkowej skoro nie ma do tej warstwy dostępu? Na tym przecież polega cała idea tworzenia takiego warstwowego systemu aby klient miał dostęp tylko do najniższej warstwy.

Przecież aplikacja go wpuści gdy poda on login i hasło prawidłowo zapisane w bazie danych, tak samo jak wpuszcza każdego innego użytkownika na jego konto. Oczywiście możliwości będzie miał on tylko takie, jakie ma użytkownik na tym koncie.

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