웹 보안 미드레벨 테스트·코드품질 면접

웹 보안 미드레벨 (3~7년) 테스트 · 코드품질 3문항 조회수 34 · 2026-08-13 (목) 07:40:49
1 보안 테스트 전략
Medium

Q. XSS(Cross-Site Scripting) 취약점을 검증하기 위한 단위 테스트와 통합 테스트를 각각 어떻게 설계하시겠습니까? 테스트 케이스 예시와 함께 각 테스트 레벨에서 검증해야 할 사항을 설명해주세요.

입력 검증 레이어와 출력 인코딩 레이어를 분리해서 생각해보세요.

A. 모범답안

단위 테스트에서는 입력 sanitization 함수가 스크립트 태그, 이벤트 핸들러, javascript: 프로토콜 등을 올바르게 제거하거나 이스케이프하는지 검증합니다. 예를 들어 '<script>alert(1)</script>', '<img src=x onerror=alert(1)>' 같은 페이로드를 입력으로 주고 기대하는 출력이 나오는지 확인합니다. 통합 테스트에서는 실제 HTTP 요청을 통해 사용자 입력이 저장되고 렌더링되는 전체 플로우를 검증합니다. 데이터베이스에 악성 스크립트를 포함한 데이터를 저장한 후, 해당 데이터를 조회하는 API 응답이나 렌더링된 HTML에서 스크립트가 실행 가능한 형태로 노출되지 않는지 확인합니다. 또한 Content-Security-Policy 헤더가 올바르게 설정되어 있는지도 통합 테스트에서 검증해야 합니다. E2E 테스트에서는 Selenium이나 Playwright를 사용해 실제 브라우저에서 스크립트 실행 여부를 확인할 수 있습니다.

핵심 포인트
  • • 단위 테스트: 입력 sanitization 함수의 동작 검증
  • • 통합 테스트: 저장-조회-렌더링 전체 플로우 검증
  • • 다양한 XSS 페이로드 테스트 케이스 준비
  • • CSP 헤더 및 출력 인코딩 검증
답변에 넣으면 좋은 키워드
XSS sanitization HTML 이스케이프 CSP 페이로드 통합 테스트
실무에서는

사용자 입력을 받는 게시판, 댓글 시스템 등에서 XSS 방어 로직의 정확성을 지속적으로 검증할 때 사용됩니다.

Follow-up 질문

테스트 자동화 과정에서 false positive를 줄이기 위해 어떤 전략을 사용하시겠습니까?

2 보안 코드 리뷰
Hard

Q. 인증/인가 로직을 포함한 Pull Request를 코드 리뷰할 때 특별히 주의 깊게 확인해야 할 보안 체크리스트 항목들을 제시하고, 각 항목이 중요한 이유를 설명해주세요. 실제 발견할 수 있는 취약점 사례도 함께 언급해주세요.

인증 우회, 권한 상승, 토큰 관리, 세션 처리 측면에서 생각해보세요.

A. 모범답안

첫째, 인증 체크 누락 여부를 확인합니다. 새로운 엔드포인트나 조건문 분기에서 인증 미들웨어가 빠진 경우 인증 우회가 발생할 수 있습니다. 둘째, 권한 검증 로직에서 수평적/수직적 권한 상승 취약점을 확인합니다. 예를 들어 사용자 ID를 파라미터로 받을 때 요청자가 해당 리소스의 소유자인지 검증하지 않으면 IDOR 취약점이 발생합니다. 셋째, JWT 토큰 검증 시 알고리즘 혼동 공격을 방지하기 위해 서명 알고리즘을 명시적으로 지정했는지, 'none' 알고리즘을 거부하는지 확인합니다. 넷째, 세션 관리에서 로그아웃 시 세션이 완전히 무효화되는지, 세션 고정 공격을 방지하기 위해 로그인 성공 시 세션 ID를 재생성하는지 검토합니다. 다섯째, 비밀번호나 토큰이 로그에 기록되거나 에러 메시지에 노출되지 않는지 확인합니다. 마지막으로 하드코딩된 시크릿이나 API 키가 없는지, 환경 변수나 시크릿 관리 시스템을 사용하는지 점검합니다.

핵심 포인트
  • • 인증 미들웨어 누락 및 인증 우회 가능성 검토
  • • IDOR 등 권한 검증 로직의 완전성 확인
  • • JWT 알고리즘 혼동, 세션 고정 등 구현 취약점 점검
  • • 민감 정보 노출 및 시크릿 하드코딩 여부 확인
답변에 넣으면 좋은 키워드
인증 우회 IDOR 권한 상승 JWT 세션 고정 알고리즘 혼동 시크릿 관리
실무에서는

인증/인가 기능 추가나 수정 시 코드 리뷰 단계에서 보안 취약점을 사전에 차단하는 데 필수적입니다.

Follow-up 질문

코드 리뷰만으로 발견하기 어려운 보안 취약점은 무엇이며, 이를 보완하기 위해 어떤 추가 검증 방법을 사용하시겠습니까?

3 TDD와 보안 리팩토링
Medium

Q. 레거시 코드베이스에서 SQL Injection 취약점이 있는 동적 쿼리 생성 로직을 안전한 Parameterized Query로 리팩토링해야 합니다. TDD 방식으로 접근할 때 어떤 순서로 테스트를 작성하고 리팩토링을 진행하시겠습니까? 각 단계별로 설명해주세요.

기존 동작을 보존하면서 보안 취약점을 제거하는 순서를 고려해보세요.

A. 모범답안

먼저 기존 동작을 보존하기 위해 현재 로직에 대한 특성화 테스트(Characterization Test)를 작성합니다. 정상적인 입력값들에 대해 기대하는 쿼리 결과가 나오는지 검증하는 테스트들을 만듭니다. 다음으로 SQL Injection 공격 페이로드를 포함한 실패 테스트를 작성합니다. 예를 들어 ' OR '1'='1, '; DROP TABLE users-- 같은 입력에 대해 쿼리가 안전하게 처리되어야 함을 명시하는 테스트를 추가합니다. 이 테스트는 현재 실패하는 상태입니다. 그 다음 Parameterized Query를 사용하도록 코드를 리팩토링합니다. 문자열 연결 방식의 쿼리를 PreparedStatement나 ORM의 파라미터 바인딩으로 변경합니다. 리팩토링 후 모든 특성화 테스트가 여전히 통과하는지 확인하여 기존 동작이 보존되었음을 검증하고, SQL Injection 테스트도 통과하는지 확인합니다. 마지막으로 엣지 케이스를 추가로 테스트하고, 코드 리뷰를 통해 모든 쿼리 생성 부분이 안전하게 변경되었는지 확인합니다.

핵심 포인트
  • • 특성화 테스트로 기존 동작 보존 확인
  • • SQL Injection 페이로드 테스트 케이스 작성
  • • Parameterized Query로 리팩토링 후 모든 테스트 통과 확인
  • • 점진적이고 안전한 리팩토링 프로세스
답변에 넣으면 좋은 키워드
SQL Injection Parameterized Query 특성화 테스트 TDD 리팩토링 PreparedStatement
실무에서는

레거시 시스템의 보안 취약점을 제거하면서도 기존 기능을 안전하게 유지해야 할 때 사용하는 접근법입니다.

Follow-up 질문

ORM을 사용하는 환경에서도 SQL Injection이 발생할 수 있는 경우는 언제이며, 이를 테스트로 어떻게 검증하시겠습니까?

댓글 0

로그인 후 댓글을 작성할 수 있습니다.

아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!