검색창의 제한만 믿었던 개발자
가상 이야기 · 핵심노트 기반
핵심노트 개념: 시큐어 코딩 — 외부 입력과 명령을 분리한다
이 글에서 배우는 교훈
화면의 입력 제한을 거치지 않는 요청도 올 수 있으므로 서버에서 값을 확인하고 데이터베이스 명령과 분리해야 합니다.
핵심노트를 바탕으로 만든 가상 이야기입니다. 실제 사건이나 검증된 성과가 아닙니다.
근거: 시큐어 코딩 — 외부 입력과 명령을 분리한다 · 핵심노트 4
구체적으로는 개발자는 서버 검증과 매개변수 질의를 사용해 입력값이 SQL 명령의 구조를 바꾸지 못하게 했습니다.
관련 교재 내용
정보보안 이해와 활용 · V. 애플리케이션 보안 · SQL 삽입 대응
사용자 입력을 SQL 명령문에 바로 붙이면 입력이 명령 구조를 바꿀 수 있습니다. 매개변수 바인딩은 명령과 입력값을 나눠 전달해 입력을 데이터로 처리하는 방법입니다.
이 사례에 적용한 내용: 화면 제한을 믿던 검색 기능을 서버 검증과 매개변수 질의로 바꾸어 입력을 데이터로 처리합니다.
교재 원리의 실무 적용 · 교재 원문 인용이 아닌 자체 설명입니다.
본문
검색 화면은 글자 수와 형식을 제한했지만 서버는 받은 검색어를 SQL 문자열에 그대로 붙였습니다. 승인된 시험에서 화면을 거치지 않은 요청을 보내자 예상과 다른 조회가 발생했습니다.
개발자는 서버에서 입력의 형식과 범위를 검사했습니다. SQL 명령과 값을 매개변수 바인딩으로 분리하고 잘못된 입력도 질의 구조를 바꾸지 않는지 시험했습니다.
결론
화면의 입력 제한은 서버가 받는 모든 요청을 통제하지 못했습니다. 외부 입력을 데이터로 다루고 업무 규칙과 질의 구조를 각각 보호해야 합니다.