> 데이터 베이스 > MySQL 튜토리얼 > 물음표가 포함된 매개변수화된 쿼리는 어떻게 SQL 삽입 공격을 방지합니까?

물음표가 포함된 매개변수화된 쿼리는 어떻게 SQL 삽입 공격을 방지합니까?

Susan Sarandon
풀어 주다: 2025-01-09 21:21:43
원래의
445명이 탐색했습니다.

How Do Parameterized Queries with Question Marks Prevent SQL Injection Attacks?

매개변수화된 쿼리로 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿