Partage de technologie

Méthode C# pour vérifier si l'instruction d'entrée contient une intrusion SQL

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 :

1. Utilisez des requêtes paramétrées

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.

  1. using System.Data.SqlClient;
  2. public void ExecuteQuery(string userInput)
  3. {
  4. string connectionString = "数据库连接字符串";
  5. string query = "SELECT * FROM Users WHERE Username = @Username";
  6. using (SqlConnection connection = new SqlConnection(connectionString))
  7. using (SqlCommand command = new SqlCommand(query, connection))
  8. {
  9. command.Parameters.AddWithValue("@Username", userInput);
  10. connection.Open();
  11. SqlDataReader reader = command.ExecuteReader();
  12. while (reader.Read())
  13. {
  14. // Process the data
  15. }
  16. }
  17. }

2. Vérifiez la saisie de l'utilisateur pour les caractères dangereux

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 SELECTINSERTDELETEUPDATEDROP etc).

  1. public bool IsSqlInjection(string input)
  2. {
  3. string[] sqlCheckList = { "SELECT", "INSERT", "UPDATE", "DELETE", "DROP", "--", ";", "'" };
  4. foreach (string item in sqlCheckList)
  5. {
  6. if (input.IndexOf(item, StringComparison.OrdinalIgnoreCase) >= 0)
  7. {
  8. return true;
  9. }
  10. }
  11. return false;
  12. }
  13. string userInput = txtUserInput.Text;
  14. if (IsSqlInjection(userInput))
  15. {
  16. MessageBox.Show("输入包含不安全的字符,请重新输入。");
  17. }
  18. else
  19. {
  20. // 继续处理用户输入
  21. ExecuteQuery(userInput);
  22. }

3. Utiliser le cadre ORM

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.

  1. using (var context = new YourDbContext())
  2. {
  3. var user = context.Users.SingleOrDefault(u => u.Username == userInput);
  4. if (user != null)
  5. {
  6. // Process the user data
  7. }
  8. }