Berbagi teknologi

Metode C# untuk memverifikasi apakah pernyataan input berisi intrusi SQL

2024-07-12

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

Untuk memverifikasi apakah data yang dimasukkan pengguna berisi pernyataan serangan injeksi SQL di C# WinForms, Anda dapat menggunakan berbagai metode untuk mendeteksi dan mencegah injeksi SQL. Berikut beberapa metode umum:

1. Gunakan kueri berparameter

Kueri berparameter adalah praktik terbaik untuk mencegah injeksi SQL dengan meneruskan input pengguna ke kueri SQL sebagai parameter, bukan langsung menyematkannya ke dalam string SQL. Hal ini memastikan bahwa input pengguna tidak ditafsirkan sebagai kode 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. Periksa input pengguna untuk karakter berbahaya

Karakter injeksi SQL umum dan kata kunci seperti tanda kutip tunggal ('), tanda kutip ganda ("), titik koma (;), simbol komentar (--), serta kata kunci SQL umum seperti SELECTINSERTDELETEUPDATEDROP dll).

  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. Gunakan kerangka ORM

Menggunakan kerangka ORM (Pemetaan Relasional Objek) seperti Entity Framework dapat sangat mengurangi risiko injeksi SQL karena kerangka ORM secara otomatis menangani kueri berparameter.

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