Jestem bardzo zaskoczony, że problem nie został szczegółowo omówiony:Czy istnieją bardziej bezpieczne alternatywy dla klasy .Net SQLConnection?
mówi nam, jak użyć windbg do zrzutu działających ciągów procesów .Net w pamięci.
Spędziłem dużo czasu na badaniu klasy SecureString, która wykorzystuje niezarządzane bloki z przypiętymi blokami i utrzymuje również zaszyfrowane dane. Świetna sprawa.
Problem pojawia się, gdy używasz jego wartości i przypisujesz ją do właściwości SQLConnection.ConnectionString, która jest typu System.String. Co to znaczy? Cóż ...
- To przechowywane w postaci zwykłego tekstu
- Garbage Collection porusza się wokół, pozostawiając kopie w pamięci
- To można odczytać z pamięci WinDBG wysypisk
That całkowite neguje funkcja SecureString!
Co więcej, klasa SQLConnection jest nieodłączna, nie mogę nawet przetworzyć własnej z właściwością SecureString; Yay dla zamkniętego źródła. Yay.
Nowa warstwa DAL jest w toku, ale dla nowej wersji głównej i dla tak wielu użytkowników minie co najmniej 2 lata, zanim każdy użytkownik zostanie uaktualniony, inni mogą pozostać na starej wersji bezterminowo, z dowolnego powodu.
Ze względu na częstotliwość połączenia, układanie z SecureString nie pomoże, ponieważ niezmienne stare kopie przechowują się w pamięci do momentu pojawienia się GC. Zintegrowane zabezpieczenia systemu Windows nie są opcją, ponieważ niektórzy klienci nie działają w domenach, a inne przechodzą i łączą się przez sieć.
Jak zabezpieczyć ciąg połączenia w pamięci, aby nie można było go wyświetlić za pomocą windbg?
Czy mówisz o aplikacji znajdującej się na komputerze klienta lub aplikacji internetowej? – ALOToverflow
To jest aplikacja kliencka po stronie klienta .Net 2.0, architektura klient-serwer – invert