매개 변수를 사용 하면 데이터베이스가 데스크톱 프로그램 또는 웹 사이트와 같은 프로그램 인터페이스와 함께 사용될 때 SQL 주입 공격 을 방지하는 데 도움 이됩니다.
귀하의 예에서 사용자는 .NET에서 문을 작성하여 데이터베이스에서 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 수정 :
George Stocker의 의견에 따라 샘플 코드를 AddWithValue
. 또한 일반적으로 IDisposable
s를 using
문으로 래핑하는 것이 좋습니다 .