> 백엔드 개발 > PHP 튜토리얼 > SQL 주입을 방지하기 위해 MySQL 문에 PHP 변수를 안전하게 삽입하는 방법은 무엇입니까?

SQL 주입을 방지하기 위해 MySQL 문에 PHP 변수를 안전하게 삽입하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-12-25 16:47:14
원래의
878명이 탐색했습니다.

How to Safely Insert PHP Variables into MySQL Statements to Prevent SQL Injection?

MySQL 문에 PHP 변수 삽입

MySQL 문에 PHP 변수를 포함할 때 데이터 무결성을 보장하고 데이터 무결성을 보장하기 위한 규칙을 이해하는 것이 중요합니다. 잠재적인 보안 취약점.

1. 데이터 리터럴에 대해 준비된 문 사용

내용: SQL 데이터 리터럴(문자열 또는 숫자)을 나타내는 모든 PHP 변수는 준비된 문을 통해 포함되어야 합니다.

이유: 준비된 문은 SQL 삽입을 방지하여 데이터를 삭제하고 보호합니다.

방법:

  • SQL 쿼리에서 변수를 자리 표시자로 바꿉니다.
  • 쿼리를 준비합니다.
  • 변수를 자리 표시자에 바인딩합니다.
  • 다음을 실행합니다. query.

mysqli 사용 예:

$type = 'testing';
$reporter = "John";
$sql = "INSERT INTO contents (type, reporter, description) VALUES ('whatever', ?, ?)";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("ss", $reporter, $description);
$stmt->execute();
로그인 후 복사

PDO 사용 방법:

$type = 'testing';
$reporter = "John";
$sql = "INSERT INTO contents (type, reporter, description) VALUES ('whatever', ?, ?)";
$stmt = $pdo->prepare($sql);
$stmt->execute([$reporter, $description]);
로그인 후 복사

2. 쿼리 부분에 대한 화이트리스트 필터링

내용: 다른 쿼리 부분(키워드, 식별자)을 나타내는 변수는 허용된 값의 "화이트 리스트"를 통해 필터링되어야 합니다.

이유: 악의적인 사용자가 승인되지 않은 쿼리 부분을 삽입하거나 키워드.

방법:

  • 허용된 값 목록을 만듭니다.
  • 쿼리에 변수를 포함하기 전에 목록과 변수를 비교 확인하세요. .
  • 데이터베이스 구문에 따라 식별자 형식을 지정합니다(예: 백틱 MySQL).

:

$orderby = $_GET['orderby'] ?: "name";
$allowed = ["name", "price", "qty"];
$key = array_search($orderby, $allowed, true);
if ($key === false) {
    throw new InvalidArgumentException("Invalid field name");
}
$query = "SELECT * FROM `table` ORDER BY `$orderby` $direction";
로그인 후 복사

위 내용은 SQL 주입을 방지하기 위해 MySQL 문에 PHP 변수를 안전하게 삽입하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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