Condivisione della tecnologia

Metodo C# per verificare se l'istruzione di input contiene un'intrusione SQL

2024-07-12

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

Per verificare se i dati immessi dall'utente contengono istruzioni di attacco SQL injection in C# WinForms, è possibile utilizzare diversi metodi per rilevare e prevenire SQL injection. Ecco alcuni metodi comuni:

1. Utilizzare query con parametri

Le query con parametri rappresentano la procedura migliore per impedire l'iniezione SQL passando l'input dell'utente come parametri alla query SQL, anziché incorporarlo direttamente nella stringa SQL. Ciò garantisce che l'input dell'utente non venga interpretato come codice 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. Controllare l'input dell'utente per i caratteri pericolosi

Caratteri e parole chiave SQL injection comuni come virgolette singole ('),Virgolette ("), punto e virgola (;), simbolo di commento (--), nonché parole chiave SQL comuni come SELECTINSERTDELETEUPDATEDROP eccetera).

  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. Utilizzare il framework ORM

L'utilizzo di un framework ORM (Object Relational Mapping) come Entity Framework può ridurre notevolmente il rischio di SQL injection poiché il framework ORM gestisce automaticamente le query con parametri.

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