Việc sử dụng các tham số giúp ngăn chặn các cuộc tấn công SQL Injection khi cơ sở dữ liệu được sử dụng cùng với giao diện chương trình như chương trình máy tính để bàn hoặc trang web.
Trong ví dụ của bạn, người dùng có thể trực tiếp chạy mã SQL trên cơ sở dữ liệu của bạn bằng cách tạo các câu lệnh trong txtSalary
.
Ví dụ: nếu họ viết 0 OR 1=1
, SQL được thực thi sẽ là
SELECT empSalary from employee where salary = 0 or 1=1
theo đó tất cả EmpSalary sẽ được trả lại.
Hơn nữa, người dùng có thể thực hiện các lệnh tồi tệ hơn nhiều đối với cơ sở dữ liệu của bạn, bao gồm cả việc xóa nó Nếu họ viết 0; Drop Table employee
:
SELECT empSalary from employee where salary = 0; Drop Table employee
Bảng employee
sau đó sẽ bị xóa.
Trong trường hợp của bạn, có vẻ như bạn đang sử dụng .NET. Sử dụng các tham số dễ dàng như:
C #
string sql = "SELECT empSalary from employee where salary = @salary";
using (SqlConnection connection = new SqlConnection(/* connection info */))
using (SqlCommand command = new SqlCommand(sql, connection))
{
var salaryParam = new SqlParameter("salary", SqlDbType.Money);
salaryParam.Value = txtMoney.Text;
command.Parameters.Add(salaryParam);
var results = command.ExecuteReader();
}
VB.NET
Dim sql As String = "SELECT empSalary from employee where salary = @salary"
Using connection As New SqlConnection("connectionString")
Using command As New SqlCommand(sql, connection)
Dim salaryParam = New SqlParameter("salary", SqlDbType.Money)
salaryParam.Value = txtMoney.Text
command.Parameters.Add(salaryParam)
Dim results = command.ExecuteReader()
End Using
End Using
Chỉnh sửa 2016-4-25:
Theo nhận xét của George Stocker, tôi đã thay đổi mã mẫu để không sử dụng AddWithValue
. Ngoài ra, chúng tôi khuyên bạn nên đặt IDisposable
s trong các using
câu lệnh.