2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Afin de vérifier si les données saisies par l'utilisateur contiennent des instructions d'attaque par injection SQL dans C# WinForms, vous pouvez utiliser diverses méthodes pour détecter et empêcher l'injection SQL. Voici quelques méthodes courantes :
Les requêtes paramétrées constituent la meilleure pratique pour empêcher l’injection SQL en transmettant les entrées utilisateur à la requête SQL en tant que paramètres plutôt que de les intégrer directement dans la chaîne SQL. Cela garantit que les entrées de l'utilisateur ne sont pas interprétées comme du code SQL.
- using System.Data.SqlClient;
-
- public void ExecuteQuery(string userInput)
- {
- string connectionString = "数据库连接字符串";
- string query = "SELECT * FROM Users WHERE Username = @Username";
-
- using (SqlConnection connection = new SqlConnection(connectionString))
- using (SqlCommand command = new SqlCommand(query, connection))
- {
- command.Parameters.AddWithValue("@Username", userInput);
-
- connection.Open();
- SqlDataReader reader = command.ExecuteReader();
- while (reader.Read())
- {
- // Process the data
- }
- }
- }
Caractères d'injection SQL courants et mots-clés tels que les guillemets simples ('
),Double citation ("
), point-virgule (;
), symbole de commentaire (--
), ainsi que des mots-clés SQL courants tels que SELECT
、INSERT
、DELETE
、UPDATE
、DROP
etc).
- public bool IsSqlInjection(string input)
- {
- string[] sqlCheckList = { "SELECT", "INSERT", "UPDATE", "DELETE", "DROP", "--", ";", "'" };
- foreach (string item in sqlCheckList)
- {
- if (input.IndexOf(item, StringComparison.OrdinalIgnoreCase) >= 0)
- {
- return true;
- }
- }
- return false;
- }
-
-
- string userInput = txtUserInput.Text;
- if (IsSqlInjection(userInput))
- {
- MessageBox.Show("输入包含不安全的字符,请重新输入。");
- }
- else
- {
- // 继续处理用户输入
- ExecuteQuery(userInput);
- }
L'utilisation d'un framework ORM (Object Relational Mapping) tel que Entity Framework peut réduire considérablement le risque d'injection SQL car le framework ORM gère automatiquement les requêtes paramétrées.
- using (var context = new YourDbContext())
- {
- var user = context.Users.SingleOrDefault(u => u.Username == userInput);
- if (user != null)
- {
- // Process the user data
- }
- }