>데이터 베이스 >MySQL 튜토리얼 >PDO에서 ORDER BY 절 매개변수와 함께 준비된 명령문을 어떻게 안전하게 사용할 수 있습니까?

PDO에서 ORDER BY 절 매개변수와 함께 준비된 명령문을 어떻게 안전하게 사용할 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-14 11:38:10981검색

How Can I Securely Use Prepared Statements with ORDER BY Clause Parameters in PDO?

준비된 PDO 문을 사용하여 ORDER BY 매개변수 설정

준비된 PDO 문을 사용하여 SQL 쿼리를 실행하는 경우 설정을 시도할 때 어려움이 발생할 수 있습니다. ORDER BY 절 내의 매개변수. 이 문서에서는 제한 사항을 살펴보고 대체 솔루션을 제공하여 이 문제를 해결합니다.

직접 SQL 삽입

WHERE 절에서 매개변수를 사용하는 것은 기능적이지만 이를 ORDER에 적용합니다. BY 절은 문제가 있는 것으로 판명되었습니다. 이 제한을 우회하려면 SQL 쿼리에 직접 삽입해야 합니다. 그러나 이 접근 방식에서는 아래와 같이 쿼리의 보안과 무결성을 보장하기 위해 엄격한 예방 조치가 필요합니다.

$order = 'columnName';
$direction = 'ASC';

$query = "SELECT * from table WHERE column = :my_param ORDER BY $order $direction";

하드코딩 연산자 및 식별자

모든 연산자 및 식별자 ORDER BY 절 내의 내용은 다음과 같이 스크립트에 하드코딩되어야 합니다.

$orders = array("name", "price", "qty");
$key = array_search($_GET['sort'], $orders);
$order = $orders[$key];
$query = "SELECT * from table WHERE is_live = :is_live ORDER BY $order";

방향에도 동일한 원칙이 적용됩니다.

화이트리스트 도우미 기능

필요한 코드 양을 최소화하기 위해 화이트리스트 도우미 기능을 사용할 수 있습니다.

$order = white_list($order, ["name", "price", "qty"], "Invalid field name");
$direction = white_list($direction, ["ASC", "DESC"], "Invalid ORDER BY direction");

$sql = "SELECT field from table WHERE column = ? ORDER BY $order $direction";

값을 확인하여 유효하지 않은 경우 오류를 발생시키는 함수입니다. 이 기술은 데이터 검증 및 보안을 보장합니다.

위 내용은 PDO에서 ORDER BY 절 매개변수와 함께 준비된 명령문을 어떻게 안전하게 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.