Compartir tecnología

Método C# para verificar si la declaración de entrada contiene una intrusión SQL

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Para verificar si los datos ingresados ​​por el usuario contienen declaraciones de ataque de inyección SQL en C# WinForms, puede utilizar una variedad de métodos para detectar y prevenir la inyección SQL. Aquí hay algunos métodos comunes:

1. Utilice consultas parametrizadas

Las consultas parametrizadas son la mejor práctica para evitar la inyección de SQL al pasar la entrada del usuario como parámetros a la consulta SQL, en lugar de incrustarla directamente en la cadena SQL. Esto garantiza que la entrada del usuario no se interprete como código 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. Verifique la entrada del usuario en busca de caracteres peligrosos.

Caracteres y palabras clave comunes de inyección SQL, como comillas simples ('),Doble comillas ("), punto y coma (;), símbolo de comentario (--), así como palabras clave SQL comunes como 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. Utilice el marco ORM

El uso de un marco ORM (Mapeo relacional de objetos) como Entity Framework puede reducir en gran medida el riesgo de inyección SQL porque el marco ORM maneja automáticamente consultas parametrizadas.

  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. }