기술나눔

입력 문에 SQL 침입이 포함되어 있는지 확인하는 C# 메서드

2024-07-12

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

C# WinForms에서는 사용자가 입력한 데이터에 SQL 주입 공격 문이 포함되어 있는지 확인하기 위해 다양한 방법을 사용하여 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 프레임워크 사용

Entity Framework와 같은 ORM(객체 관계형 매핑) 프레임워크를 사용하면 ORM 프레임워크가 매개 변수화된 쿼리를 자동으로 처리하므로 SQL 삽입 위험을 크게 줄일 수 있습니다.

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