การใช้พารามิเตอร์ช่วยป้องกันการโจมตี SQL Injectionเมื่อฐานข้อมูลถูกใช้ร่วมกับอินเทอร์เฟซของโปรแกรมเช่นโปรแกรมเดสก์ท็อปหรือเว็บไซต์
ในตัวอย่างของคุณผู้ใช้สามารถเรียกใช้โค้ด SQL บนฐานข้อมูลของคุณได้โดยตรงโดยสร้างคำสั่งในรูปแบบtxtSalary
.
ตัวอย่างเช่นหากต้องการเขียน0 OR 1=1
SQL ที่เรียกใช้งานจะเป็น
SELECT empSalary from employee where salary = 0 or 1=1
โดยที่ empSalaries ทั้งหมดจะถูกส่งคืน
นอกจากนี้ผู้ใช้สามารถดำเนินการคำสั่งที่แย่กว่านั้นมากกับฐานข้อมูลของคุณรวมถึงการลบออกหากพวกเขาเขียนว่า0; Drop Table employee
:
SELECT empSalary from employee where salary = 0; Drop Table employee
employee
จากนั้นตารางจะถูกลบ
ในกรณีของคุณดูเหมือนว่าคุณกำลังใช้. NET การใช้พารามิเตอร์นั้นง่ายพอ ๆ กับ:
ค#
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
แก้ไข 2016-4-25:
ตามความคิดเห็นของจอร์จ Stocker AddWithValue
ของผมเปลี่ยนโค้ดตัวอย่างที่จะไม่ใช้ นอกจากนี้โดยทั่วไปขอแนะนำให้คุณรวมคำสั่งIDisposable
s ไว้using
ด้วย