데이터베이스 보호: 준비된 문에서 LIKE '%{$var}%'의 올바른 사용
사용자 입력에 응답하는 동적 검색 기능을 구축하려면 보안을 신중하게 고려해야 합니다. 일반적인 시나리오는 MySQL의 LIKE
연산자를 사용하여 부분적으로 일치하는 사용자 이름을 검색하는 것입니다. 그러나 사용자 입력을 준비된 문 내의 LIKE
절에 직접 통합하면 SQL 주입 취약점이 발생하기 쉽습니다.
잘못된 접근 방식에는 LIKE
와 같은 SELECT * FROM users WHERE username LIKE '%{?}%'
와일드카드 문자 내에 자리 표시자를 삽입하려는 시도가 포함되는 경우가 많습니다. 데이터베이스 드라이버가 자리 표시자 구문을 올바르게 해석하지 않기 때문에 이는 결함이 있습니다.
보안 구현의 핵심은 명령문을 준비하기 LIKE
전에 식을 구성하는 데 있습니다. 이를 통해 사용자 입력이 적절하게 삭제되고 실행 코드가 아닌 데이터로 처리됩니다. 올바른 방법은 다음과 같습니다.
<code class="language-php">$searchParam = "%" . $yourParam . "%"; // Prepend and append wildcards $stmt = $mysqli->prepare("SELECT * FROM REGISTRY WHERE name LIKE ?"); $stmt->bind_param("s", $searchParam); // Bind the complete LIKE expression $stmt->execute();</code>
이 개선된 예에서는 %
와일드카드가 사용자 제공 $yourParam
에 추가되어 LIKE
에 저장된 완전한 $searchParam
패턴을 생성합니다. 그런 다음 이 완전한 패턴은 문자열 유형("s")과 함께 bind_param
을 사용하여 준비된 문의 자리 표시자에 바인딩됩니다. 이는 동적 검색 기능을 유지하면서 SQL 주입을 방지합니다. 이 접근 방식은 준비된 문이 제공하는 보안과 효율성을 모두 보장합니다.
위 내용은 준비된 명령문과 함께 MySQL의 LIKE '%{$var}%'를 어떻게 안전하게 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!