Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: .NET Framework
.NET
Standard
We wcześniejszych wersjach ADO.NET sprawdzanie w czasie kompilacji parametrów połączenia z połączonymi wartościami łańcuchowymi nie miało miejsca, co skutkowało tym, że w czasie wykonywania niepoprawne słowo kluczowe generowało ArgumentException. Dostawca danych Microsoft SqlClient dla programu SQL Server zawiera klasę Microsoft.Data.SqlClient.SqlConnectionStringBuilder konstruktora parametrów połączenia, która dziedziczy z DbConnectionStringBuilderklasy .
Ataki iniekcji 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 opartych na danych wejściowych użytkownika. Jeśli ciąg nie został zweryfikowany, 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. Na przykład osoba atakująca może przeprowadzić atak, poprzez podanie średnika i dołączenie innej wartości. Parametry połączenia są analizowane przy użyciu algorytmu "last one wins", a złośliwe dane wejściowe są zastępowane wiarygodną wartością.
Klasy konstruktorów parametry połączenia zostały zaprojektowane tak, aby wyeliminować odgadywanie i chronić przed błędami składni i lukami w zabezpieczeniach. Udostępniają metody i właściwości odpowiadające znanym parom klucz/wartość dozwolonym przez dostawcę danych. Każda klasa utrzymuje stałą kolekcję synonimów i może tłumaczyć się z synonimu na odpowiednią dobrze znaną nazwę klucza. Sprawdzanie jest wykonywane dla prawidłowych par klucz/wartość, a nieprawidłowa para zgłasza wyjątek. Ponadto wprowadzone wartości są obsługiwane w bezpieczny sposób.
W poniższym przykładzie pokazano, jak SqlConnectionStringBuilder obsługuje wstawioną dodatkową wartość ustawienia Initial Catalog .
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
builder.DataSource = "(local)";
builder.IntegratedSecurity = true;
builder.InitialCatalog = "AdventureWorks;NewValue=Bad";
Console.WriteLine(builder.ConnectionString);
Dane wyjściowe pokazują, że SqlConnectionStringBuilder obsłużyła ją poprawnie, uciekając przed dodatkową wartością w podwójnych cudzysłowach, zamiast dołączać ją do parametrów połączenia jako nową parę klucz/wartość.
data source=(local);Integrated Security=True;
initial catalog="AdventureWorks;NewValue=Bad"
Kompilowanie parametry połączenia z plików konfiguracji
Jeśli niektóre elementy parametrów połączenia są znane wcześniej, mogą być przechowywane w pliku konfiguracji i pobierane w czasie wykonywania w celu utworzenia pełnych parametrów połączenia. Na przykład nazwa bazy danych może być znana z wyprzedzeniem, ale nie nazwa serwera. Możesz chcieć, aby użytkownik podał nazwę i hasło w czasie wykonywania programu, bez możliwości wstrzykiwania innych wartości do ciągu połączenia.
Jeden z przeciążonych konstruktorów konstruktora parametry połączenia przyjmuje String jako argument, który umożliwia podanie częściowych parametry połączenia, które można następnie ukończyć z danych wejściowych użytkownika. Parametry połączenia częściowego mogą być przechowywane w pliku konfiguracji i pobierane w czasie wykonywania.
Uwaga / Notatka
Przestrzeń nazw System.Configuration umożliwia programowy dostęp do plików konfiguracji, które używają WebConfigurationManager w aplikacjach internetowych oraz ConfigurationManager w aplikacjach systemu Windows. Aby uzyskać więcej informacji na temat pracy z plikami parametry połączenia i plikami konfiguracji, zobacz Parametry połączenia i pliki konfiguracji.
Example
W tym przykładzie pokazano, jak pobrać częściowy ciąg połączenia z pliku konfiguracyjnego i uzupełnić go poprzez ustawienie właściwości DataSource, UserID oraz PasswordSqlConnectionStringBuilder. Plik konfiguracji jest zdefiniowany w następujący sposób.
<connectionStrings>
<clear/>
<add name="partialConnectString"
connectionString="Initial Catalog=Northwind;"
providerName="Microsoft.Data.SqlClient" />
</connectionStrings>
Uwaga / Notatka
Musisz ustawić odwołanie do System.Configuration.dll elementu w projekcie, aby kod został uruchomiony.
private static void BuildConnectionString(string dataSource,
string userName, string userPassword)
{
// Retrieve the partial connection string named databaseConnection
// from the application's app.config or web.config file.
ConnectionStringSettings settings =
ConfigurationManager.ConnectionStrings["partialConnectString"];
if (null != settings)
{
// Retrieve the partial connection string.
string connectString = settings.ConnectionString;
Console.WriteLine("Original: {0}", connectString);
// Create a new SqlConnectionStringBuilder based on the
// partial connection string retrieved from the config file.
SqlConnectionStringBuilder builder =
new SqlConnectionStringBuilder(connectString);
// Supply the additional values.
builder.DataSource = dataSource;
builder.UserID = userName;
builder.Password = userPassword;
Console.WriteLine("Modified: {0}", builder.ConnectionString);
}
}