피드로 돌아가기
Prepared statements in Manticore Search
Dev.toDev.to
Database

Prepared statements 도입으로 SQL injection 취약점 100% 방지함

Prepared statements in Manticore Search

Sergey Nikolaev2026년 4월 3일9beginner

Context

사용자 입력을 SQL 쿼리에 직접 연결하는 방식은 SQL injection에 취약함. 1 OR 1=1 같은 입력값이 WHERE 절을 우회하여 전체 레코드를 반환시킴.

Technical Solution

  • Prepared Statements: SQL 구조와 데이터를 분리하여 쿼리 구조를 먼저 파싱함
  • ? 플레이스홀더: 정수, 실수, 문자열 파라미터를 자동으로 escaping 처리함
  • ?VEC? 플레이스홀더: 쉼표로 구분된 숫자 리스트를 벡터 형태로 직접 처리함
  • 3단계 프로세스: Prepare → Bind → Execute 순서로 실행함
  • Manticore Search: MySQL 프로토콜 기반으로 prepared statements 지원함

Impact

Key Takeaway

Prepared statements는 사용자 입력을 SQL 코드가 아닌 순수 데이터로 취급하여 SQL injection 공격을 원천 차단함. Rust sqlx 환경에서는 컬럼 인덱스 사용이 필수이며, 다중 쿼리는 지원하지 않음.


Manticore Search 연동 시 모든 동적 파라미터를 플레이스홀더(? 또는 ?VEC?)로 처리해야 함. PHP에서는 bind_param(), Rust에서는 try_get(인덱스)를 사용해야 안전하게 쿼리를 실행할 수 있음.

원문 읽기