정처LAB 자체 제작자동 검사 완료2026 정보보안기사 기초 개념 문제 · 애플리케이션 보안 · 53번
애플리케이션이 로그인 아이디를 다음처럼 SQL 문자열에 연결한다.
sql = "SELECT id FROM member WHERE login_id='" + input + "'";
입력값이 SQL 구문의 구조로 해석되는 문제를 가장 직접적으로 막는 수정은?
1
HTML 출력 인코딩만 적용하고 SQL 생성 방식은 그대로 둔다.
오답 이유HTML 인코딩은 브라우저 출력 문맥의 XSS 방어에 쓰인다. 데이터베이스가 입력을 SQL 코드로 해석하는 문제는 해결하지 못한다.
2
SQL을 `WHERE login_id = ?`로 작성하고 입력값을 매개변수로 바인딩한다.
정답 근거매개변수 바인딩은 SQL 구조와 입력 데이터를 분리한다. 입력에 따옴표나 연산자가 있어도 DBMS는 이를 조건식 코드가 아니라 하나의 값으로 처리한다.
3
입력에서 공백 문자만 제거한 뒤 문자열 연결을 유지한다.
오답 이유SQL 삽입 구문은 공백 없이도 구성할 수 있고 주석·연산자 등 다양한 문법을 이용할 수 있어 공백 제거만으로는 안전하지 않다.
4
작은따옴표를 발견할 때마다 개발자가 직접 역슬래시를 붙여 문자열에 연결한다.
오답 이유수동 이스케이프는 DBMS 문자 규칙과 인코딩에 따라 빠뜨리기 쉽다. 문자열 연결 자체를 없애고 드라이버의 매개변수 기능을 사용해야 한다.
정답·상세해설
정답 2번
취약점의 원인은 신뢰할 수 없는 입력을 SQL 문자열에 직접 이어 붙여 데이터와 명령의 경계가 사라진 것이다. 준비된 문장 또는 매개변수화 질의로 `WHERE login_id = ?`를 만들고 입력값을 별도로 바인딩하면 SQL 구조는 고정되고 입력은 값으로만 처리된다. 출력 인코딩이나 일부 문자 제거는 이 경계를 보장하지 않는다.