Ý tưởng của tôi là tạo một số lớp chung cho Chèn/Cập nhật/Chọn qua ứng dụng Winforms C# (3.5) nói chuyện với cơ sở dữ liệu MySQL thông qua MySQL .NET Connector 6.2.2.C# và MySQL .NET Connector - Bất kỳ cách nào ngăn chặn các cuộc tấn công SQL Injection trong một lớp chung?
Ví dụ:
public void Insert(string strSQL)
{
if (this.OpenConnection() == true)
{
MySqlCommand cmd = new MySqlCommand(strSQL, connection);
cmd.ExecuteNonQuery();
this.CloseConnection();
}
}
Sau đó từ bất cứ nơi nào trong chương trình tôi có thể chạy một truy vấn có/không có người dùng nhập vào bằng cách chỉ cần đi qua một chuỗi truy vấn SQL.
Đọc xung quanh trên SO đang bắt đầu cho tôi chỉ báo rằng điều này có thể dẫn đến tấn công SQL injection (đối với bất kỳ giá trị người dùng nhập nào). Có anyway của chà strSQL đầu vào hoặc tôi cần phải đi và tạo ra các truy vấn tham số cá nhân trong mọi phương pháp mà cần phải làm một chức năng cơ sở dữ liệu?
UPDATE1:
giải pháp cuối cùng của tôi trông giống như sau:
public void Insert(string strSQL,string[,] parameterValue)
{
if (this.OpenConnection() == true)
{
MySqlCommand cmd = new MySqlCommand(strSQL, connection);
for(int i =0;i< (parameterValue.Length/2);i++)
{
cmd.Parameters.AddWithValue(parameterValue[i,0],parameterValue[i,1]);
}
cmd.ExecuteNonQuery();
this.CloseConnection();
}}
Ý tưởng khủng khiếp này la hét. Bạn nên sử dụng ORM hoặc viết procs được lưu trữ. –