SQL 매개변수화된 쿼리가 SQL 삽입을 방지할 수 있는 이유를 분석하는 기사

藏色散人
풀어 주다: 2023-03-17 16:09:44
앞으로
2069명이 탐색했습니다.

이 기사에서는 SQL 매개변수 쿼리가 SQL 삽입을 방지할 수 있는 이유에 대해 주로 설명합니다. 관심 있는 친구는 아래에서 모든 사람에게 도움이 되기를 바랍니다.

SQL 매개변수화된 쿼리가 SQL 삽입을 방지할 수 있는 이유를 분석하는 기사

SQL 매개변수 쿼리가 SQL 삽입을 방지할 수 있는 이유는 무엇인가요?

1. SQL 인젝션이란?

양식 제출이나 입력 도메인 이름 또는 페이지 요청의 쿼리 문자열에 SQL 명령을 삽입하여 서버를 속여 악성 SQL 명령을 실행하도록 하는 것입니다.

 -- 正常的查询语句
 select * from users where username = 'a';

 -- 恶意的查询语句
 select * from users where username = 'a' or 1==1;
로그인 후 복사

2. 매개변수화된 쿼리란

매개변수화된 쿼리는 데이터베이스를 쿼리할 때 데이터를 채워야 하는 위치에 매개변수를 사용하는 것을 의미합니다.

set @id = 1;
SELECT * from users WHERE id = @id ;
로그인 후 복사

3. SQL 문 실행 처리

SQL 문은 처리 흐름에 따라 실시간 SQL과 전처리 SQL 두 가지가 있습니다.

  • Instant SQL

Instant SQL은 DB에서 받아 최종 실행 후 반환됩니다. 일반적인 프로세스는 다음과 같습니다.

  a. 词法和语义解析
  b. 优化sql语句,制定执行计划
  c. 执行并返回结果
로그인 후 복사

특징: 하나의 컴파일, 하나의 실행.

  • SQL 전처리

프로그램 내 특정 SQL이 반복적으로 호출되거나, 실행될 때마다 개별 값만 달라질 수 있습니다. 실시간 SQL 처리를 매번 살펴보면 효율성이 상대적으로 낮다.

이때, SQL의 값을 자리 표시자로 대체할 수 있습니다. 먼저 SQL 템플릿을 생성한 다음, 명령문을 반복적으로 실행할 때 어휘 및 의미 분석을 수행하지 않고 매개변수만 바꾸면 됩니다. . 템플릿화되거나 매개변수화된 SQL 문으로 간주될 수 있습니다.

기능: 한 번 컴파일하고 여러 번 실행하여 여러 구문 분석 및 기타 프로세스를 제거합니다. (다중 실행은 동일한 세션에서 동일한 명령문을 다시 실행하는 것을 의미하므로 다시 구문 분석 및 컴파일되지 않습니다.)

  -- 语法
  # 定义预处理语句
  PREPARE stmt_name FROM preparable_stmt;
  # 执行预处理语句
  EXECUTE stmt_name [USING @var_name [, @var_name] ...];
  # 删除(释放)定义
  {DROP | DEALLOCATE} PREPARE stmt_name;
로그인 후 복사

4. SQL 전처리는 어떻게 SQL 주입을 방지합니까?

실행할 SQL이 컴파일됩니다. DB는 실행 시 다시 컴파일하지 않고 대신 SQL 템플릿을 찾아 매개변수를 전달한 후 실행합니다. 따라서 또는 1==1과 유사한 명령은 매개변수로 전달되며 의미론적으로 구문 분석 및 실행되지 않습니다.

 -- 预处理编译 SQL ,会占用资源
 PREPARE stmt1 from 'SELECT COUNT(*) FROM users WHERE PASSWORD = ? AND user_name = ?';

 set [@a](https://learnku.com/users/16347) = 'name1 OR 1 = 1';
 set @b = 'pwd1';

 EXECUTE stmt1 USING @b,[@a](https://learnku.com/users/16347);

 -- 使用 DEALLOCATE PREPARE 释放资源
 DEALLOCATE PREPARE stmt1;
로그인 후 복사

추천 학습: "MySQL 비디오 튜토리얼"

위 내용은 SQL 매개변수화된 쿼리가 SQL 삽입을 방지할 수 있는 이유를 분석하는 기사의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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