내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
C# WinForms에서는 사용자가 입력한 데이터에 SQL 주입 공격 문이 포함되어 있는지 확인하기 위해 다양한 방법을 사용하여 SQL 주입을 탐지하고 방지할 수 있습니다. 다음은 몇 가지 일반적인 방법입니다.
매개 변수화된 쿼리는 사용자 입력을 SQL 문자열에 직접 포함하는 대신 매개 변수로 SQL 쿼리에 전달하여 SQL 주입을 방지하는 모범 사례입니다. 이렇게 하면 사용자 입력이 SQL 코드로 해석되지 않습니다.
- using System.Data.SqlClient;
-
- public void ExecuteQuery(string userInput)
- {
- string connectionString = "数据库连接字符串";
- string query = "SELECT * FROM Users WHERE Username = @Username";
-
- using (SqlConnection connection = new SqlConnection(connectionString))
- using (SqlCommand command = new SqlCommand(query, connection))
- {
- command.Parameters.AddWithValue("@Username", userInput);
-
- connection.Open();
- SqlDataReader reader = command.ExecuteReader();
- while (reader.Read())
- {
- // Process the data
- }
- }
- }
일반적인 SQL 주입 문자 및 작은따옴표('
),큰따옴표("
), 세미콜론(;
), 코멘트 기호(--
) 및 다음과 같은 일반적인 SQL 키워드도 포함됩니다. SELECT
、INSERT
、DELETE
、UPDATE
、DROP
등).
- public bool IsSqlInjection(string input)
- {
- string[] sqlCheckList = { "SELECT", "INSERT", "UPDATE", "DELETE", "DROP", "--", ";", "'" };
- foreach (string item in sqlCheckList)
- {
- if (input.IndexOf(item, StringComparison.OrdinalIgnoreCase) >= 0)
- {
- return true;
- }
- }
- return false;
- }
-
-
- string userInput = txtUserInput.Text;
- if (IsSqlInjection(userInput))
- {
- MessageBox.Show("输入包含不安全的字符,请重新输入。");
- }
- else
- {
- // 继续处理用户输入
- ExecuteQuery(userInput);
- }
Entity Framework와 같은 ORM(객체 관계형 매핑) 프레임워크를 사용하면 ORM 프레임워크가 매개 변수화된 쿼리를 자동으로 처리하므로 SQL 삽입 위험을 크게 줄일 수 있습니다.
- using (var context = new YourDbContext())
- {
- var user = context.Users.SingleOrDefault(u => u.Username == userInput);
- if (user != null)
- {
- // Process the user data
- }
- }