Ochrona informacji o połączeniu
Ochrona dostępu do źródła danych jest jednym z najważniejszych celów podczas zabezpieczania aplikacji. Parametry połączenia przedstawia potencjalną lukę w zabezpieczeniach, jeśli nie jest ona zabezpieczona. Przechowywanie informacji o połączeniu w postaci zwykłego tekstu lub utrwalanie ich w pamięci powoduje naruszenie całego systemu. Parametry połączenia osadzone w kodzie źródłowym można odczytać przy użyciu Ildasm.exe (IL Dezasembler), aby wyświetlić wspólny język pośredni (CIL) w skompilowanym zestawie.
Luki w zabezpieczeniach obejmujące parametry połączenia mogą powstać na podstawie typu używanego uwierzytelniania, sposobu utrwalania parametry połączenia w pamięci i na dysku oraz technik używanych do konstruowania ich w czasie wykonywania.
Ważne
Firma Microsoft zaleca korzystanie z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Jeśli łączysz się z usługą Azure SQL, tożsamości zarządzane dla zasobów platformy Azure to zalecana metoda uwierzytelniania.
Użyj uwierzytelniania systemu Windows
Aby ograniczyć dostęp do źródła danych, należy zabezpieczyć informacje o połączeniu, takie jak identyfikator użytkownika, hasło i nazwa źródła danych. Aby uniknąć uwidaczniania informacji o użytkowniku, zalecamy użycie uwierzytelniania systemu Windows (czasami nazywanego zintegrowanymi zabezpieczeniami) dla lokalnych źródeł danych. (Jednak podczas nawiązywania połączenia z usługą Azure SQL należy użyć polecenia Tożsamości zarządzane dla zasobów platformy Azure). Uwierzytelnianie systemu Windows jest określone w parametry połączenia przy użyciu Integrated Security
słów kluczowych lubTrusted_Connection
, eliminując konieczność użycia identyfikatora użytkownika i hasła. W przypadku korzystania z uwierzytelniania systemu Windows użytkownicy są uwierzytelniani przez system Windows, a dostęp do zasobów serwera i bazy danych jest określany przez udzielanie uprawnień użytkownikom i grupom systemu Windows.
W sytuacjach, w których nie można użyć uwierzytelniania systemu Windows, należy użyć dodatkowej ostrożności, ponieważ poświadczenia użytkownika są uwidocznione w parametry połączenia. W aplikacji ASP.NET można skonfigurować konto systemu Windows jako stałą tożsamość używaną do łączenia się z bazami danych i innymi zasobami sieciowymi. Personifikację można włączyć w elemecie identity w pliku web.config i określić nazwę użytkownika i hasło.
<identity impersonate="true"
userName="MyDomain\UserAccount"
password="*****" />
Stałe konto tożsamości powinno być kontem o niskim poziomie uprawnień, któremu udzielono tylko niezbędnych uprawnień w bazie danych. Ponadto należy zaszyfrować plik konfiguracji, aby nazwa użytkownika i hasło nie zostały ujawnione w postaci zwykłego tekstu.
Ważne
Firma Microsoft zaleca korzystanie z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Przepływ uwierzytelniania opisany w tej procedurze wymaga bardzo wysokiego poziomu zaufania w aplikacji i niesie ze sobą ryzyko, które nie występują w innych przepływach. Tego przepływu należy używać tylko wtedy, gdy inne bezpieczniejsze przepływy, takie jak tożsamości zarządzane, nie są opłacalne.
Nie używaj plików usługi Universal Data Link (UDL)
Unikaj przechowywania parametry połączenia dla OleDbConnection pliku w formacie UDL (Universal Data Link). Listy zdefiniowane przez użytkownika są przechowywane w postaci zwykłego tekstu i nie można ich zaszyfrować. Plik UDL jest zewnętrznym zasobem opartym na plikach w aplikacji i nie można go zabezpieczyć ani zaszyfrować przy użyciu programu .NET Framework.
Unikaj ataków polegających na wstrzyknięciu za pomocą konstruktorów parametrów połączenia
Atak polegający na wstrzyknięciu parametry połączenia może wystąpić, gdy łączenie ciągów dynamicznych jest używane do tworzenia parametry połączenia na podstawie danych wejściowych użytkownika. Jeśli dane wejściowe użytkownika nie zostały zweryfikowane, a złośliwy tekst lub znaki nie zostały usunięte, osoba atakująca może uzyskać dostęp do poufnych danych lub innych zasobów na serwerze. Aby rozwiązać ten problem, ADO.NET 2.0 wprowadził nowe klasy konstruktorów parametry połączenia w celu zweryfikowania składni parametry połączenia i zapewnienia, że nie wprowadzono dodatkowych parametrów. Aby uzyskać więcej informacji, zobacz Konstruktory parametrów połączenia.
Korzystanie z polecenia Persist Security Info=False
Wartość domyślna parametru Persist Security Info
to false. Zalecamy użycie tej wartości domyślnej we wszystkich parametry połączenia. Ustawienie Persist Security Info
wartości lub yes
true
umożliwia uzyskanie informacji poufnych zabezpieczeń, w tym identyfikatora użytkownika i hasła, z połączenia po jego otwarciu. Gdy Persist Security Info
jest ustawiona wartość false
lub no
, informacje o zabezpieczeniach są odrzucane po otwarciu połączenia, zapewniając, że niezaufane źródło nie ma dostępu do informacji poufnych zabezpieczeń.
Szyfrowanie plików konfiguracji
Można również przechowywać parametry połączenia w plikach konfiguracji, co eliminuje konieczność osadzania ich w kodzie aplikacji. Pliki konfiguracji to standardowe pliki XML, dla których program .NET Framework zdefiniował wspólny zestaw elementów. Parametry połączenia w plikach konfiguracji są zwykle przechowywane wewnątrz <elementu connectionStrings> w pliku app.config dla aplikacji systemu Windows lub pliku web.config dla aplikacji ASP.NET. Aby uzyskać więcej informacji na temat podstaw przechowywania, pobierania i szyfrowania parametry połączenia z plików konfiguracji, zobacz Parametry połączenia i pliki konfiguracji.