2010-01-26 17 views
5

Zajmuję się tworzeniem aplikacji WinForm .net, przeznaczonych do uruchamiania w kilku oddziałach banku jako aplikacja zapasowa, gdy główna aplikacja (aplikacja internetowa) jest niedostępna z powodu problemów z połączeniem z centralny węzeł banku. Same oddziały nie liczą się z żadnymi usługami dla przedsiębiorstw poza bazą danych SQL-Server. Z tego powodu aplikacja powinna móc łączyć się bezpośrednio z serwerem SQL. Mój problem powstaje, gdy muszę podać aplikację z hasłem do połączenia z bazą danych:Zabezpieczenia ciągów połączeń w aplikacji pulpitu .net

1) Zapisywanie hasła w czystym tekście w pliku app.config lub podobnym nie jest opcją (klient wymaga hasła do być zaszyfrowane)

2) Przechowywanie hasła zaszyfrowanego w pliku konfiguracyjnym prowadzi do potrzeby posiadania lokalnego klucza szyfrującego. Klucz szyfrowania może być po prostu zakodowany w kodzie aplikacji, ale byłby łatwy do odczytania za pomocą .net-decompiler lub podobnego.

3) Używanie niestandardowego algorytmu do szyfrowania/odszyfrowywania nie działa z tych samych powodów, co 2).

4) Zintegrowane bezpieczeństwo nie jest obsługiwany przez bank

Dodatkowo, klienci wymagają, że powinny one być w stanie zmienić hasło w jednym miejscu (w obrębie gałęzi) bez potrzeby, aby przejść z jednego komputera na inny aktualizowanie plików konfiguracyjnych (które wykluczają możliwość użycia klucza komputera do zaszyfrowania hasła w plikach konfiguracyjnych poszczególnych komputerów, takich jak asp.net).

Czy przedstawiłbyś inne podejście lub sugestię rozwiązania tego problemu? Byłbym wdzięczny za każdą pomoc. Dzięki z góry, BERNABE

Odpowiedz

1

Nie sądzę, że wymuszenie hasła w jakikolwiek sposób rozwiąże twój problem. Jeśli użytkownik musi wysłać hasło do serwera, a hasło znajduje się w polu, to z definicji użytkownik uruchamiający aplikację musi mieć dostęp do hasła i być w stanie go odszyfrować. W przeciwnym razie nie będzie można ich uwierzytelnić. Oznacza to, że zawsze będzie sposób, aby użytkownik uzyskał hasło, niezależnie od tego, gdzie je przechowujesz.

Potrafię wymyślić 2 sposoby, które mogą zadziałać, ale obawiam się, że nie są dokładnie tym, czego szukasz.

  1. zniesienie wymogu posiadania użytkownik wysłać hasło do serwera za pomocą jakiegoś lokalnego pełnomocnika (na przykład za pomocą WCF okien usługę), aby zabrać swoje winform żądania, a następnie wysłać je na twoja nazwa na serwer DB. Jeśli użytkownik zainstaluje usługę przy użyciu konta innego niż konto użytkownika, , można zabezpieczyć hasło za pomocą dowolnego ze środków wspomnianych w innych odpowiedziach . Chodzi tutaj o to, aby użytkownik aplikacji nie miał dostępu do zasobów, które musi odszyfrować odszyfrować hasło.
  2. Nie przechowuj hasła w konfiguracji sieci. Przydziel każdemu użytkownikowi inne konto użytkownika i hasło na poziomie bazy danych i poproś o wpisanie go podczas logowania.
+0

Witam, dziękuję za odpowiedź. Posiadanie dostępu do danych w oddzielnej, samoobsługowej usłudze wygląda jak dobry sposób na przejście (w rzeczywistości byłoby to łatwe do wdrożenia, pod warunkiem, że już umieścił wszystkie funkcje dostępu do danych za fasadą. robię małe badania na temat hostowanych usług wcf i odkryłem, że Microsoft nie zaleca tej opcji dla środowisk produkcyjnych. Co o tym sądzisz? Czy wiesz o jakimkolwiek systemie produkcyjnym, który z niej korzysta? Jestem całkiem nowy w WCF Dzięki! Bernabé –

+0

Jeśli hostujesz go w tej samej aplikacji, AFAIK, będzie działał pod tym samym kontem użytkownika, co nie jest tym, czego potrzebujesz.Zalecam hosting WCF jako usługę Windows, ponieważ jest łatwy do zabezpieczenia, działa lokalnie i nie musisz instalować niczego innego na pudełku, jak na przykład IIS. Oto link do artykułu MSDN opisujący opcje hostingu, wskazujący konkretnie hostowanie go jako usługi Windows. http://msdn.microsoft.com/en-us/library/bb332338.aspx#msdnwcfhc_topic4 – jvilalta

+0

Dokładnie, właśnie to miałem na myśli, gdy mnie brakowało - używając terminu "hosting własny". W opublikowanym artykule rozmawiają o "ograniczonych funkcjach o wysokiej dostępności", gdy porównują hosting usług Windows z hostingiem IIS. Ale nie są do końca konkretne, nie znam pogody, która mogłaby mieć znaczenie w moim przypadku, oddział mógł mieć nie więcej niż 20 jednoczesnych użytkowników. –

0

Można

  • Aby korzystać DPAPI do przechowywania klucza szyfrowania/deszyfrowania bezpiecznie: How To: Use DPAPI to Encrypt and Decrypt Data
  • zainstalować SQL Server Compact Edition (lub inna mała baza danych) do stacji roboczych oraz zsynchronizuj dane, gdy aplikacja internetowa ponownie przejdzie do trybu online.
  • Prośba o pomoc w tej instytucji, ponieważ inni ludzie mogliby rozwiązać ten problem i mogliby Ci pomóc.
0

Zdecydowanie zgadzam się z powyższym w odniesieniu do DPAPI. Biblioteka Enterprise firmy Microsoft sprawia, że ​​jest to absolutny powiew również dlatego warto najpierw się tam przyjrzeć.

Powiązane problemy