다음 코드의 SQL 삽입 취약점을 줄이는 가장 직접적인 방어 기법의 명칭과, 해당 기법이 입력을 안전하게 처리하는 이유를 쓰시오.
String sql =
"SELECT user_id FROM USERS WHERE login_id = '"
+ loginId + "'";모범답안
매개변수화 쿼리 또는 준비된 문장을 사용한다. SQL 명령의 구조와 사용자 입력값이 분리되어 입력이 SQL 구문이 아니라 데이터 값으로 처리되므로 SQL 삽입을 방지한다.
풀이와 판단 근거
매개변수화 쿼리는 SQL 문장의 구조를 먼저 정의하고 사용자 입력은 별도의 바인딩 값으로 전달한다. 따라서 입력에 따옴표나 SQL 예약어가 포함되어도 쿼리 구조의 일부로 해석되지 않는다.
입력 검증도 필요하지만 허용 문자 검사만으로 다양한 우회 표현을 모두 차단하기 어렵기 때문에 핵심 방어는 명령과 데이터를 분리하는 것이다.
자주 틀리는 지점
- 문자열에서 따옴표만 제거하면 충분하다고 판단
- HTML 출력 인코딩을 핵심 대책으로 답함
- 입력을 암호화하면 SQL 삽입이 해결된다고 설명
자동 판정 방식
한글·영문 동의어와 문항별 필수 개념을 확인하며, 정답 단어가 부정되거나 반대 개념과 함께 쓰이면 자동 정답으로 확정하지 않습니다. 부분점수는 ITPASSLAB의 학습용 예상 점수입니다.