Python 주니어 보안 기술면접

Python 주니어 (1~3년) 보안 5문항 조회수 26 · 2026-08-04 (화) 13:59:16
1 SQL 인젝션
Easy

Q. SQL 인젝션 공격이란 무엇이며, Python에서 데이터베이스 쿼리를 실행할 때 SQL 인젝션을 방지하기 위한 방법을 설명해주세요. 문자열 포맷팅을 사용한 쿼리 작성이 위험한 이유도 함께 설명해주세요.

사용자 입력을 직접 쿼리 문자열에 삽입하는 것과 파라미터화된 쿼리의 차이를 생각해보세요.

A. 모범답안

SQL 인젝션은 공격자가 악의적인 SQL 코드를 입력하여 데이터베이스를 조작하는 공격입니다. 문자열 포맷팅(f-string, %, format)으로 쿼리를 작성하면 사용자 입력이 SQL 명령어로 해석될 수 있어 위험합니다. 방지하려면 파라미터화된 쿼리(Prepared Statement)를 사용해야 하며, Python에서는 cursor.execute()의 두 번째 인자로 튜플이나 딕셔너리를 전달하는 방식을 사용합니다. Django ORM이나 SQLAlchemy 같은 ORM을 사용하면 자동으로 파라미터화된 쿼리가 생성되어 안전합니다. 또한 사용자 입력에 대한 화이트리스트 검증과 최소 권한 원칙을 적용한 DB 계정 사용도 중요합니다.

핵심 포인트
  • • 파라미터화된 쿼리 사용
  • • 문자열 포맷팅 금지
  • • ORM 프레임워크 활용
  • • 입력 검증
답변에 넣으면 좋은 키워드
SQL 인젝션 Prepared Statement 파라미터화된 쿼리 cursor.execute ORM 입력 검증
실무에서는

사용자 검색 기능이나 로그인 기능에서 SQL 인젝션을 방지하여 데이터 유출과 무단 접근을 막습니다.

Follow-up 질문

Django ORM을 사용할 때도 SQL 인젝션이 발생할 수 있는 경우가 있나요? 있다면 어떤 경우인가요?

2 XSS 공격
Medium

Q. 웹 애플리케이션에서 XSS(Cross-Site Scripting) 공격이란 무엇이며, Stored XSS와 Reflected XSS의 차이점을 설명해주세요. Python Flask나 Django에서 XSS를 방지하기 위해 어떤 방법을 사용해야 하나요?

사용자가 입력한 스크립트가 다른 사용자의 브라우저에서 실행되는 상황을 생각해보세요.

A. 모범답안

XSS는 공격자가 악의적인 스크립트를 웹 페이지에 삽입하여 다른 사용자의 브라우저에서 실행되게 하는 공격입니다. Stored XSS는 악성 스크립트가 데이터베이스에 저장되어 해당 데이터를 조회하는 모든 사용자에게 영향을 주며, Reflected XSS는 URL 파라미터 등을 통해 즉시 반사되어 특정 사용자에게만 영향을 줍니다. Django는 템플릿 엔진에서 자동으로 HTML 이스케이핑을 수행하고, Flask는 Jinja2 템플릿에서 자동 이스케이핑을 제공합니다. 추가로 사용자 입력을 출력할 때는 항상 이스케이핑을 확인하고, Content Security Policy 헤더를 설정하며, safe 필터나 mark_safe 함수 사용을 최소화해야 합니다.

핵심 포인트
  • • Stored XSS와 Reflected XSS 차이
  • • HTML 이스케이핑
  • • 템플릿 엔진의 자동 보호
  • • CSP 헤더 설정
답변에 넣으면 좋은 키워드
XSS Cross-Site Scripting HTML 이스케이핑 Stored XSS Reflected XSS CSP Jinja2
실무에서는

게시판이나 댓글 기능에서 악성 스크립트 삽입을 방지하여 사용자 세션 탈취나 피싱 공격을 막습니다.

Follow-up 질문

사용자가 입력한 HTML을 허용해야 하는 경우(예: 게시판 에디터)에는 어떻게 XSS를 방지할 수 있나요?

3 비밀번호 암호화
Medium

Q. 사용자 비밀번호를 데이터베이스에 저장할 때 평문으로 저장하면 안 되는 이유와, Python에서 안전하게 비밀번호를 저장하기 위해 사용하는 해싱 알고리즘을 설명해주세요. bcrypt나 PBKDF2를 사용하는 이유와 Salt의 역할도 함께 설명해주세요.

단방향 해시 함수와 Rainbow Table 공격, 그리고 연산 비용의 중요성을 고려해보세요.

A. 모범답안

평문 비밀번호는 데이터베이스 유출 시 모든 계정이 즉시 노출되므로 반드시 해싱해야 합니다. MD5나 SHA-1 같은 빠른 해시는 브루트포스 공격에 취약하므로, bcrypt, PBKDF2, Argon2 같은 느린 해시 알고리즘을 사용해야 합니다. Salt는 각 비밀번호마다 고유한 랜덤 값을 추가하여 동일한 비밀번호도 다른 해시값을 갖게 만들어 Rainbow Table 공격을 방지합니다. Python에서는 bcrypt 라이브러리나 Django의 make_password 함수를 사용하며, 이들은 자동으로 Salt를 생성하고 적용합니다. 해시 라운드 수를 조정하여 연산 비용을 높일 수 있어 미래의 하드웨어 발전에도 대응할 수 있습니다.

핵심 포인트
  • • 느린 해시 알고리즘 사용
  • • Salt의 역할과 중요성
  • • bcrypt, PBKDF2 등 사용
  • • Rainbow Table 공격 방지
답변에 넣으면 좋은 키워드
비밀번호 해싱 bcrypt PBKDF2 Salt Rainbow Table 단방향 해시 Argon2
실무에서는

회원가입 시스템에서 비밀번호를 안전하게 저장하여 데이터베이스 유출 시에도 실제 비밀번호가 노출되지 않도록 보호합니다.

Follow-up 질문

비밀번호 해싱에서 Pepper라는 개념도 있는데, Salt와 어떻게 다르며 언제 사용하나요?

4 CSRF 공격
Medium

Q. CSRF(Cross-Site Request Forgery) 공격이란 무엇이며, 어떤 원리로 동작하나요? Django나 Flask에서 CSRF 공격을 방지하기 위해 사용하는 CSRF 토큰의 동작 원리와 구현 방법을 설명해주세요.

인증된 사용자의 권한을 악용하여 의도하지 않은 요청을 보내는 공격 방식을 생각해보세요.

A. 모범답안

CSRF는 공격자가 사용자가 의도하지 않은 요청을 인증된 세션을 통해 강제로 실행시키는 공격입니다. 사용자가 로그인된 상태에서 악의적인 사이트를 방문하면, 해당 사이트가 사용자 모르게 정상 사이트로 요청을 보내 비밀번호 변경이나 송금 등을 수행할 수 있습니다. CSRF 토큰은 서버가 생성한 예측 불가능한 값으로, 폼 제출 시 함께 전송되어 정당한 요청인지 검증합니다. Django는 템플릿에서 csrf_token 태그를 사용하고, Flask는 Flask-WTF 확장으로 자동 토큰 생성 및 검증을 수행합니다. GET 요청은 상태 변경을 일으키지 않도록 설계하고, POST, PUT, DELETE 등의 요청에만 CSRF 보호를 적용해야 합니다.

핵심 포인트
  • • 인증된 세션 악용 공격
  • • CSRF 토큰의 검증 원리
  • • 상태 변경 요청에 적용
  • • GET 요청은 안전하게 설계
답변에 넣으면 좋은 키워드
CSRF Cross-Site Request Forgery CSRF 토큰 csrf_token Flask-WTF 세션 하이재킹
실무에서는

비밀번호 변경, 계좌 이체, 게시글 삭제 등 중요한 작업에서 사용자가 의도한 요청인지 확인합니다.

Follow-up 질문

SameSite 쿠키 속성이 CSRF 방지에 어떻게 도움이 되나요?

5 세션 관리
Medium

Q. 웹 애플리케이션에서 세션 하이재킹(Session Hijacking) 공격이란 무엇이며, 이를 방지하기 위한 방법들을 설명해주세요. Python Flask나 Django에서 세션을 안전하게 관리하기 위해 설정해야 하는 쿠키 속성들(HttpOnly, Secure, SameSite)의 역할을 설명해주세요.

세션 ID를 탈취당하면 공격자가 사용자인 척 할 수 있다는 점을 생각해보세요.

A. 모범답안

세션 하이재킹은 공격자가 사용자의 세션 ID를 탈취하여 해당 사용자로 위장하는 공격입니다. 방지하려면 HTTPS를 필수로 사용하고, 쿠키에 적절한 보안 속성을 설정해야 합니다. HttpOnly 속성은 JavaScript에서 쿠키 접근을 차단하여 XSS 공격으로 인한 세션 탈취를 방지합니다. Secure 속성은 HTTPS 연결에서만 쿠키를 전송하도록 하여 중간자 공격을 방지합니다. SameSite 속성은 크로스 사이트 요청에서 쿠키 전송을 제한하여 CSRF 공격을 방지합니다. 추가로 세션 타임아웃 설정, 로그인 후 세션 ID 재생성, IP 주소나 User-Agent 검증 등의 방법도 함께 사용해야 합니다.

핵심 포인트
  • • HttpOnly로 XSS 방어
  • • Secure로 HTTPS 강제
  • • SameSite로 CSRF 방어
  • • 세션 ID 재생성
답변에 넣으면 좋은 키워드
세션 하이재킹 HttpOnly Secure SameSite 쿠키 속성 세션 관리 HTTPS
실무에서는

로그인 기능에서 세션을 안전하게 관리하여 사용자 계정이 무단으로 접근되는 것을 방지합니다.

Follow-up 질문

JWT 토큰을 사용할 때는 세션 하이재킹 방지를 위해 어떤 추가 조치가 필요한가요?

댓글 0

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

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