소프트웨어 개발보안 문제는 공격 문자열을 외우는 방식으로 공부하면 변형에 약합니다. 먼저 외부 입력이 어디로 들어가고, 어떤 해석기를 거치며, 어느 문맥에서 실행되는지를 추적해야 취약점과 대응책을 정확히 연결할 수 있습니다.
입력값이 코드로 해석되는 경계를 찾습니다
외부 입력 자체가 곧 취약점은 아닙니다. 입력값이 문자열 결합을 통해 SQL 문의 구조를 바꾸거나, HTML·JavaScript 문맥에서 실행되거나, 파일 경로를 벗어나도록 사용되는 지점을 찾아야 합니다. 문제의 코드에서 입력 출처와 위험한 처리 함수를 선으로 연결하세요.
- 입력사용자·요청·파일에서 들어온 값을 표시한다.
- 전달검증·변환을 거쳐 어디로 이동하는지 추적한다.
- 해석DB, 브라우저, 운영체제, 파일시스템이 값의 일부를 명령으로 해석하는지 본다.
- 대응그 해석 경계에 맞는 근본 통제를 고른다.
SQL 삽입은 쿼리 구조와 데이터가 섞일 때 발생합니다
사용자 입력을 SQL 문자열에 그대로 이어 붙이면 입력이 데이터가 아니라 SQL 구문의 일부로 해석될 수 있습니다. 대표 대응은 준비된 문장과 매개변수화된 쿼리를 사용해 SQL 구조와 값을 분리하는 것입니다. 테이블명이나 정렬 방향처럼 바인딩하기 어려운 식별자는 허용 목록으로 제한해야 합니다.
XSS는 출력되는 문맥에 맞춰 인코딩합니다
신뢰할 수 없는 값이 브라우저에서 실행 가능한 HTML이나 스크립트로 해석되면 XSS가 발생할 수 있습니다. 방어는 입력을 무조건 삭제하는 한 가지 규칙이 아니라 HTML 본문, 속성, URL, JavaScript 등 출력 문맥에 맞는 인코딩과 안전한 출력 함수를 사용하는 것입니다. 사용자가 HTML을 작성해야 한다면 검증된 방식으로 살균하는 절차도 필요합니다.
경로 조작은 문자열 포함 검사보다 최종 경로를 확인합니다
../ 문자열 한 가지만 막으면 인코딩과 운영체제별 경로 표현을 놓칠 수 있습니다. 서버가 허용한 파일 이름이나 식별자만 받도록 범위를 줄이고, 경로를 정규화한 뒤 최종 위치가 기준 디렉터리 안에 있는지 확인해야 합니다.
답안은 취약점·원인·대응 원리를 한 줄씩 연결합니다
서술형에서는 “SQL 삽입을 방지한다”로 끝내지 마세요. “외부 입력을 SQL 문자열에 결합해 쿼리 구조가 바뀔 수 있으므로, 준비된 문장과 매개변수 바인딩으로 구조와 데이터를 분리한다”처럼 원인과 대응이 맞물리게 씁니다.
SQL 결과 계산도 함께 준비해야 한다면 정보처리기사 실기 SQL 공부법으로 이어가세요.