SQL 인젝션SQL Injection
SQL Injection
입력값이 SQL 명령으로 해석돼 의도하지 않은 데이터 처리가 일어나는 문제예요.
SQL 인젝션은 외부 입력이 SQL 명령의 일부로 해석돼 개발자가 의도하지 않은 조회나 변경이 실행되는 취약점과 공격을 말해요. 입력을 문자열로 이어 붙여 질의를 만들 때 발생할 수 있어요. 질의 구조와 값을 분리하는 파라미터 바인딩을 적용하고 동적 식별자와 데이터베이스 권한도 관리해야 해요.
쉽게 비유하면
주문서의 메모가 주방의 작업 지시로 잘못 읽히는 것과 비슷해요.
조금 더 자세히
검색어와 폼 입력뿐 아니라 앱이 신뢰할 수 없는 여러 값이 영향을 줄 수 있어요. 서버에서 쿼리를 만드는 경로를 점검해요.
일반적인 값은 준비된 질의와 파라미터 바인딩으로 전달해요. 테이블명과 정렬 기준 등 값으로 바인딩하기 어려운 부분은 허용 목록처럼 제한된 선택으로 구성해요.
어떻게 사용하나요
앱의 데이터와 실행할 명령을 같은 문자열로 조립하면 입력이 명령 구조를 바꾸는 문제가 생길 수 있어요.
어떻게 작동하나요
- 1. 입력 처리 확인 입력이 데이터베이스 질의에 들어가는 경로를 찾아요.
- 2. 명령과 값 분리 파라미터 바인딩과 제한된 동적 구성을 적용해요.
- 3. 권한과 검증 필요한 DB 권한만 부여하고 회귀 검사를 수행해요.
활용 예시
- 검색 API의 질의 생성 점검
- 관리자 보고서의 정렬 조건 검토
알고 쓰는 기술
따옴표를 지우거나 ORM을 쓰면 항상 예방되나요?
문자 제거만으로 충분하지 않고 ORM에서도 원시 질의를 조립하면 위험해요. 실제 질의 생성 방식과 바인딩을 확인해야 해요.
이렇게 쓰여요
검색 기능 개발
“검색어는 파라미터로 전달하고, 정렬 항목은 정해진 선택만 허용하자”라고 이야기해요.
관련 용어
함께 보면 좋은 용어
최종 업데이트