MySQL 문에 PHP 변수 삽입
MySQL 문에 PHP 변수를 포함할 때 데이터 무결성을 보장하고 데이터 무결성을 보장하기 위한 규칙을 이해하는 것이 중요합니다. 잠재적인 보안 취약점.
1. 데이터 리터럴에 대해 준비된 문 사용
내용: SQL 데이터 리터럴(문자열 또는 숫자)을 나타내는 모든 PHP 변수는 준비된 문을 통해 포함되어야 합니다.
이유: 준비된 문은 SQL 삽입을 방지하여 데이터를 삭제하고 보호합니다.
방법:
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. 쿼리 부분에 대한 화이트리스트 필터링
내용: 다른 쿼리 부분(키워드, 식별자)을 나타내는 변수는 허용된 값의 "화이트 리스트"를 통해 필터링되어야 합니다.
이유: 악의적인 사용자가 승인되지 않은 쿼리 부분을 삽입하거나 키워드.
방법:
예:
$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 중국어 웹사이트의 기타 관련 기사를 참조하세요!