Κοινή χρήση τεχνολογίας

Μέθοδος C# για να επαληθεύσετε εάν η πρόταση εισόδου περιέχει εισβολή SQL

2024-07-12

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

Για να επαληθεύσετε εάν τα δεδομένα που εισάγονται από τον χρήστη περιέχουν δηλώσεις επίθεσης SQL injection στο C# WinForms, μπορείτε να χρησιμοποιήσετε μια ποικιλία μεθόδων για τον εντοπισμό και την αποτροπή της ένεσης SQL. Ακολουθούν μερικές κοινές μέθοδοι:

1. Χρησιμοποιήστε παραμετροποιημένα ερωτήματα

Τα παραμετροποιημένα ερωτήματα είναι η βέλτιστη πρακτική για την αποτροπή της ένεσης SQL μεταβιβάζοντας την είσοδο χρήστη στο ερώτημα SQL ως παραμέτρους αντί να το ενσωματώνετε απευθείας στη συμβολοσειρά SQL. Αυτό διασφαλίζει ότι η είσοδος του χρήστη δεν ερμηνεύεται ως κώδικας 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. Ελέγξτε την είσοδο του χρήστη για επικίνδυνους χαρακτήρες

Κοινοί χαρακτήρες και λέξεις-κλειδιά ένεσης SQL, όπως μεμονωμένα εισαγωγικά ('), Διπλά εισαγωγικά ("), ερωτηματικό (;), σύμβολο σχολίου (--), καθώς και κοινές λέξεις-κλειδιά SQL όπως SELECTINSERTDELETEUPDATEDROP και τα λοιπά).

  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. Χρησιμοποιήστε το πλαίσιο ORM

Η χρήση ενός πλαισίου ORM (Object Relational Mapping) όπως το Entity Framework μπορεί να μειώσει σημαντικά τον κίνδυνο εισαγωγής SQL επειδή το πλαίσιο ORM χειρίζεται αυτόματα παραμετροποιημένα ερωτήματα.

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