집 >데이터 베이스 >MySQL 튜토리얼 >물음표가 포함된 매개변수화된 쿼리는 어떻게 SQL 삽입 공격을 방지합니까?
매개변수화된 쿼리로 SQL 삽입 방지: 물음표 접근 방식
SQL에서 물음표(?)로 표시되는 매개변수화된 쿼리는 SQL 주입 취약점에 대한 중요한 방어 수단입니다. 이러한 쿼리는 프로그램 내에서 동적으로 SQL 문을 구성하고 실행할 때 필수적입니다.
수동으로 생성된 쿼리에 비해 매개변수화된 쿼리의 핵심 장점은 향상된 보안에 있습니다. 데이터베이스 라이브러리는 매개변수 삽입을 처리하고 악성 코드 삽입을 방지하기 위해 필요한 이스케이프 메커니즘을 자동으로 적용합니다. 다음 취약한 예를 고려하십시오.
<code class="language-sql">string s = getStudentName(); cmd.CommandText = "SELECT * FROM students WHERE (name = '" + s + "')"; cmd.Execute();</code>
사용자가 입력하는 경우: Robert'); DROP TABLE students; --
결과 쿼리가 공격에 취약해집니다.
해결책에는 매개변수화된 쿼리를 사용하는 것이 포함됩니다.
<code class="language-sql">s = getStudentName(); cmd.CommandText = "SELECT * FROM students WHERE name = ?"; cmd.Parameters.Add(s); cmd.Execute();</code>
이제 라이브러리는 입력을 삭제하여 악성 코드를 무해하게 만듭니다. 쿼리는 사실상 "SELECT * FROM students WHERE name = 'Robert''); DROP TABLE students; --'"
이 됩니다. 삽입된 코드는 리터럴 텍스트로 처리됩니다.
물음표는 널리 사용되는 자리 표시자이지만 MS SQL Server와 같은 다른 데이터베이스 시스템에서는 가독성 향상을 위해 명명된 매개변수(예: @varname
)를 활용합니다.
<code class="language-sql">cmd.Text = "SELECT thingA FROM tableA WHERE thingB = @varname"; cmd.Parameters.AddWithValue("@varname", 7); result = cmd.Execute();</code>
이 접근 방식은 보다 명확한 매개변수 식별과 함께 동일한 보안 이점을 제공합니다.
위 내용은 물음표가 포함된 매개변수화된 쿼리는 어떻게 SQL 삽입 공격을 방지합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!