icon

안동민 개발노트

4장 : 어플리케이션보안

시큐어 코딩과 전자상거래 보안

이번 절은 어플리케이션보안 파트의 마무리입니다.

이번 절은 어플리케이션보안 파트의 마무리입니다.

지금까지 어플리케이션보안에서 배운 내용은 다음과 같습니다.

4장 1절: 웹 구조, HTTP, 쿠키, 세션, 인증과 인가
4장 2절: SQL Injection
4장 3절: XSS, CSRF, 파일 업로드 취약점
4장 4절: 인증·인가·API 보안
4장 5절: 시큐어 코딩과 전자상거래 보안

이번 절에서는 지금까지 배운 웹 취약점을 개발 단계에서 어떻게 예방할 것인가를 정리합니다.
또한 쇼핑몰, 결제, 주문, 환불 같은 전자상거래 서비스 보안을 다룹니다.


학습 목표

이번 절가 끝나면 다음 질문에 답할 수 있어야 합니다.

질문목표
시큐어 코딩이란 무엇인가?개발 단계에서 보안 취약점을 예방하는 코딩 방식이라고 설명
입력값 검증은 왜 필요한가?사용자 입력을 신뢰하지 않고 서버에서 검증해야 한다고 설명
출력값 인코딩은 왜 필요한가?XSS 방지를 위해 출력 문맥에 맞게 인코딩한다고 설명
오류 처리는 어떻게 해야 하는가?상세 오류는 사용자에게 노출하지 않고 로그에 기록한다고 설명
민감정보 보호는 어떻게 하는가?암호화, 마스킹, 접근통제, 최소 수집으로 설명
보안 설정은 왜 중요한가?기본 계정, 디버그 모드, 불필요 기능 제거가 중요하다고 설명
전자상거래 보안의 핵심은?가격·주문·결제·환불 요청을 서버에서 검증해야 한다고 설명
결제 요청 변조란?클라이언트가 금액, 상품, 수량, 할인값을 조작하는 공격이라고 설명
재전송 공격은 어떻게 막는가?Nonce, Timestamp, 주문번호, 중복 처리 방지로 설명
결제 로그는 왜 중요한가?거래 추적, 분쟁 대응, 사고 분석에 필요하다고 설명

학습 내용의 큰 그림

이번 절에서는 두 덩어리로 나눠서 봅니다.

1. 시큐어 코딩
2. 전자상거래 보안

시큐어 코딩은 개발자가 취약점을 만들지 않도록 하는 방법입니다.

전자상거래 보안은 돈과 거래가 오가는 서비스에서 발생할 수 있는 조작을 막는 방법입니다.

핵심 문장은 이것입니다.

클라이언트 입력값은 신뢰하지 않는다.
중요한 검증은 반드시 서버에서 수행한다.
민감정보는 최소 수집·암호화·접근통제한다.
거래 요청은 무결성, 인증, 재전송 방지, 로그 기록을 적용한다.

시큐어 코딩이란?

시큐어 코딩은 소프트웨어 개발 단계에서 보안 취약점이 발생하지 않도록 안전하게 설계하고 구현하는 활동입니다.

시험식 정의는 다음입니다.

시큐어 코딩은 소프트웨어 개발 과정에서 입력값 검증, 출력값 인코딩, 인증·인가, 오류 처리, 암호화, 접근통제 등 보안 원칙을 적용하여 취약점 발생을 예방하는 개발 방법이다.

핵심 의미는 다음과 같다.

시큐어 코딩 = 처음부터 보안 취약점이 생기지 않게 코딩하는 것

시큐어 코딩이 중요한 이유는 다음입니다.

이유설명
취약점 사전 예방배포 후 보완보다 개발 단계 예방이 효과적
침해사고 감소SQL Injection, XSS 등 주요 취약점 방지
비용 절감운영 중 사고 대응 비용 감소
품질 향상안전하고 안정적인 서비스 제공
법적·관리적 요구 대응개인정보, 결제정보 보호에 필요

시큐어 코딩의 핵심 원칙

시큐어 코딩에서 자주 나오는 원칙은 다음입니다.

원칙설명
입력값 검증외부 입력값의 형식, 길이, 범위를 검증
출력값 인코딩사용자 입력을 출력할 때 코드로 실행되지 않게 처리
인증·인가 검증로그인 여부와 권한을 서버에서 확인
세션 관리세션 탈취, 세션 고정 방지
안전한 SQL 처리Prepared Statement 사용
파일 업로드 검증확장자, 내용, 크기, 저장 위치 검증
오류 처리상세 내부 정보 노출 방지
민감정보 보호암호화, 마스킹, 접근통제
보안 설정기본 계정, 디버그, 불필요 기능 제거
로그 기록보안 이벤트 기록과 모니터링
최소권한사용자, 프로세스, DB 계정 권한 최소화

시험에서는 이 원칙들을 개별 취약점 대응책으로 연결해서 묻습니다.

SQL Injection → Prepared Statement, 입력값 검증
XSS → 출력값 인코딩, CSP
CSRF → CSRF Token, SameSite
파일 업로드 → 허용 확장자, 저장 경로 분리, 실행 권한 제거
인증 공격 → MFA, 실패 제한, Rate Limiting
IDOR → 서버 측 권한 검증

입력값 검증

입력값 검증이란?

입력값 검증은 사용자가 보낸 값이 허용된 형식, 길이, 범위에 맞는지 확인하는 것입니다.

시험식 정의는 다음입니다.

입력값 검증은 사용자나 외부 시스템으로부터 전달된 값이 허용된 형식, 길이, 범위, 문자 집합에 맞는지 서버 측에서 확인하는 보안 조치이다.

핵심 원칙은 이것입니다.

모든 외부 입력값은 신뢰하지 않는다.

외부 입력값에는 다음이 포함됩니다.

폼 입력값
URL 파라미터
쿠키
HTTP 헤더
파일명
API 요청 Body
JSON 필드
검색어
정렬 조건
업로드 파일

클라이언트 검증과 서버 검증

웹에서는 브라우저에서 입력값을 검사할 수도 있습니다.

예를 들어 JavaScript로 이메일 형식을 검사할 수 있습니다.

하지만 클라이언트 검증만 믿으면 안 됩니다.

왜냐하면 공격자는 브라우저 검증을 우회해서 직접 요청을 보낼 수 있기 때문입니다.

구분역할
클라이언트 검증사용자 편의성, 즉시 피드백
서버 검증실제 보안 통제, 필수 검증
시험식 문장
클라이언트 측 검증은 사용자 편의성을 높일 수 있지만 우회 가능하므로, 보안을 위해 모든 입력값은 서버 측에서 다시 검증해야 한다.

허용목록 방식

입력값 검증에서는 허용목록 방식이 바람직합니다.

허용목록 = 허용된 값만 통과
차단목록 = 위험해 보이는 값만 차단

예를 들어 정렬 기준은 다음 값만 허용합니다.

name
date
price

그 외 값은 모두 거부합니다.

시험식 답안
입력값 검증은 위험한 문자열만 차단하는 차단목록 방식보다 허용된 형식과 값만 통과시키는 허용목록 방식이 바람직하다. 차단목록은 우회 입력이 가능하지만 허용목록은 비정상 입력을 원천적으로 줄일 수 있다.

출력값 인코딩

출력값 인코딩이란?

출력값 인코딩은 사용자 입력값이 웹페이지에 출력될 때 코드로 실행되지 않고 문자로 표시되도록 변환하는 것입니다.

시험식 정의는 다음입니다.

출력값 인코딩은 사용자 입력값을 HTML, JavaScript, URL 등 출력 문맥에 맞게 변환하여 브라우저가 실행 가능한 코드가 아니라 일반 문자로 처리하도록 하는 보안 조치이다.

출력값 인코딩은 특히 XSS 대응의 핵심입니다.

XSS 대응의 핵심 = 출력값 인코딩

문맥별 인코딩

출력 위치에 따라 필요한 인코딩이 다릅니다.

출력 위치보안 처리
HTML 본문HTML 인코딩
HTML 속성속성 문맥 인코딩
JavaScript 내부JavaScript 인코딩
URLURL 인코딩
CSSCSS 문맥 주의

시험에서는 구현 방식보다 다음 문장을 기억하면 됩니다.

사용자 입력값은 출력 위치의 문맥에 맞게 인코딩해야 한다.

SQL 처리 보안

SQL Injection 대응은 이미 4장 2절에서 깊게 봤습니다.

시큐어 코딩 관점에서는 다음을 반드시 적용해야 합니다.

대책설명
Prepared StatementSQL 구조와 입력값 분리
파라미터 바인딩입력값을 데이터로 처리
입력값 검증허용된 형식과 범위만 처리
DB 권한 최소화공격 성공 시 피해 제한
오류 메시지 제한DB 구조 노출 방지
시험식 답안
SQL Injection 방지를 위해 사용자 입력값을 SQL 문자열에 직접 결합하지 않고 Prepared Statement와 파라미터 바인딩을 사용해야 한다. 또한 입력값 검증, DB 권한 최소화, 상세 오류 메시지 노출 제한을 함께 적용해야 한다.

인증·인가 보안

인증과 인가는 시큐어 코딩에서 항상 서버 측에서 처리해야 합니다.

나쁜 방식
프론트엔드에서 관리자 버튼을 숨겼으니 안전하다.
좋은 방식
서버가 매 요청마다 사용자의 권한을 검증한다.

주요 대책은 다음입니다.

대책설명
서버 측 인증 확인모든 보호 자원 요청에 로그인 확인
서버 측 인가 확인사용자 권한과 자원 소유권 확인
역할 기반 접근통제관리자, 일반 사용자 등 권한 분리
IDOR 방지객체 ID 조작 시 권한 검증
관리자 기능 보호MFA, IP 제한, 재인증
중요 기능 재인증결제, 비밀번호 변경, 권한 변경
API 권한 검증API 요청마다 인증·인가 확인
시험식 문장
인증과 인가는 클라이언트 화면 제어에 의존하지 말고 서버 측에서 매 요청마다 검증해야 한다. 특히 객체 소유자와 사용자 권한을 확인하여 IDOR와 권한 상승 취약점을 방지해야 한다.

오류 처리 보안

오류 처리는 보안에서 매우 중요합니다.

나쁜 오류 메시지 예시는 다음입니다.

SQL syntax error near ...
/var/www/app/login.php line 53
DB user: admin
Internal server IP: 10.0.0.5

이런 정보는 공격자에게 힌트를 줍니다.

노출되면 위험한 정보는 다음입니다.

노출 정보위험
DB 종류DB별 공격 방식 추정
테이블명·컬럼명데이터 구조 파악
서버 경로시스템 구조 노출
내부 IP내부망 구조 파악
계정명계정 공격에 활용
프레임워크 버전알려진 취약점 검색 가능

안전한 방식은 다음입니다.

사용자에게는 일반화된 오류 메시지만 제공
상세 오류는 서버 로그에 기록
관리자만 로그 확인
실기형 답안
오류 처리 시 사용자에게 DB 오류, 서버 경로, 내부 IP, 계정명, 프레임워크 버전 등 상세 내부 정보를 노출하면 공격자가 시스템 구조를 파악하는 데 악용할 수 있다. 따라서 사용자에게는 일반화된 오류 메시지만 제공하고, 상세 오류는 서버 로그에 기록하여 관리자만 확인하도록 해야 한다.

민감정보 보호

민감정보란?

민감정보 또는 중요정보에는 다음이 포함됩니다.

비밀번호
주민등록번호
계좌번호
카드정보
전화번호
이메일
주소
인증 토큰
세션 ID
API Key
개인정보
결제정보

민감정보 보호 원칙은 다음입니다.

최소 수집
최소 보관
암호화
마스킹
접근통제
로그 노출 금지
안전한 파기

저장 시 보호

민감정보를 저장할 때는 암호화와 접근통제가 중요하다.

정보보호 방식
비밀번호솔트 적용 해시
개인정보암호화, 접근통제
카드정보직접 저장 최소화, 토큰화 또는 결제대행 활용
API Key안전한 저장소, 접근 제한
세션 ID서버 측 보호, 만료 관리
로그민감정보 마스킹
시험식 문장
민감정보는 업무상 필요한 최소한만 수집하고, 저장 시 암호화 또는 해시를 적용하며, 접근권한을 제한하고, 로그나 화면에 평문으로 노출되지 않도록 마스킹해야 한다.

전송 시 보호

민감정보 전송에는 HTTPS가 필요합니다.

로그인 정보
결제 정보
개인정보
인증 토큰
세션 쿠키

이런 정보가 HTTP로 전송되면 스니핑으로 노출될 수 있습니다.

시험식 답안
민감정보 전송 시 HTTPS/TLS를 적용하여 통신 구간의 기밀성과 무결성을 보장해야 한다. 또한 세션 쿠키에는 Secure 속성을 적용하여 HTTPS에서만 전송되도록 해야 한다.

로그 보안

로그는 침해사고 분석에 중요하지만, 로그에 민감정보가 남으면 위험합니다.

나쁜 로그 예
id=user01&password=pass1234
cardNo=1234-5678-9012-3456
token=eyJ...
residentNo=...

로그 보안 대책은 다음입니다.

대책설명
민감정보 로그 제외비밀번호, 토큰, 카드정보 기록 금지
마스킹일부만 표시
접근통제로그 열람 권한 제한
무결성 보호로그 변조 방지
보관 기간 설정필요한 기간만 보관
시간 동기화사고 분석 정확성 확보
중앙 로그 관리통합 분석과 보관
감사 로그 기록관리자 행위 추적
시험식 답안
로그에는 비밀번호, 인증 토큰, 카드번호, 주민등록번호 등 민감정보가 평문으로 기록되지 않도록 해야 한다. 필요한 경우 마스킹하여 기록하고, 로그 접근통제, 무결성 보호, 보관 기간 설정, 시간 동기화, 중앙 로그 관리를 적용해야 한다.

보안 설정

보안 설정은 개발과 운영 모두에서 중요합니다.

취약한 보안 설정 예시는 다음입니다.

디버그 모드 활성화
기본 관리자 계정 사용
기본 비밀번호 사용
불필요한 기능 활성화
테스트 페이지 공개
디렉터리 목록 노출
상세 오류 메시지 노출
관리자 페이지 외부 전체 공개
취약한 TLS 설정
보안 헤더 미적용

대응책은 다음입니다.

대책설명
디버그 모드 비활성화운영 환경에서 상세 정보 노출 방지
기본 계정·비밀번호 변경기본 인증정보 악용 방지
불필요 기능 제거공격 표면 축소
디렉터리 리스팅 차단파일 목록 노출 방지
관리자 페이지 접근 제한IP, VPN, MFA
보안 헤더 적용HSTS, CSP 등
TLS 안전 설정취약 프로토콜과 암호군 제거
설정 파일 보호DB 비밀번호, API Key 노출 방지
운영·개발 환경 분리테스트 데이터와 기능 노출 방지
시험식 문장
운영 환경에서는 디버그 모드를 비활성화하고, 기본 계정과 기본 비밀번호를 변경하며, 불필요한 기능과 테스트 페이지를 제거해야 한다. 또한 관리자 페이지 접근 제한, 보안 헤더 적용, 안전한 TLS 설정, 설정 파일 접근통제를 통해 보안 설정 오류를 줄여야 한다.

시큐어 코딩 점검표

지금까지 내용을 실제 점검표로 정리하면 다음과 같습니다.

영역점검 항목
입력값서버 측 검증, 허용목록, 길이·형식·범위 제한
출력값문맥별 인코딩, XSS 방지
SQLPrepared Statement, DB 권한 최소화
인증MFA, 실패 제한, 안전한 비밀번호 저장
인가서버 측 권한 검증, IDOR 방지
세션재발급, 타임아웃, 쿠키 보안 속성
파일 업로드확장자, MIME, 시그니처, 저장 경로, 실행 권한
오류 처리일반 오류 표시, 상세 오류 로그 기록
민감정보암호화, 마스킹, 최소 수집, 로그 제외
API인증, 인가, Rate Limiting, 응답 최소화
설정디버그 비활성화, 기본 계정 제거, 보안 헤더
로그보안 이벤트 기록, 접근통제, 무결성 보호

전자상거래 보안의 큰 그림

전자상거래 보안은 쇼핑몰, 결제, 주문, 환불, 정산 같은 기능을 안전하게 보호하는 영역입니다.

전자상거래 서비스의 기본 흐름은 다음과 같습니다.

상품 조회
→ 장바구니
→ 주문 생성
→ 할인·쿠폰 적용
→ 결제 요청
→ 결제 승인
→ 주문 상태 변경
→ 배송
→ 취소·환불

이 과정에서 공격자는 다음을 시도할 수 있습니다.

공격 시도설명
가격 조작상품 금액을 클라이언트에서 낮게 변경
수량 조작비정상 수량으로 주문
할인 조작쿠폰, 포인트, 할인율 조작
결제 요청 변조주문번호, 금액, 사용자 ID 변경
재전송 공격같은 결제 승인 요청 반복
권한 우회타인의 주문 조회·취소
환불 조작환불 금액이나 계좌 변경
배송지 조작결제 후 배송지 변경 악용
결제 상태 위조결제 완료 응답을 임의 생성
주문 API 남용자동화 주문, 재고 선점

핵심 원칙은 다음입니다.

가격, 할인, 배송비, 결제금액, 주문상태는 클라이언트가 아니라 서버에서 계산하고 검증해야 한다.

결제 요청 변조

결제 요청 변조란?

결제 요청 변조는 사용자가 결제 과정에서 상품 가격, 수량, 할인금액, 주문번호, 사용자 ID, 결제금액 등을 조작하는 공격입니다.

시험식 정의는 다음입니다.

결제 요청 변조는 클라이언트에서 전송되는 가격, 수량, 할인, 주문번호, 결제금액 등의 값을 공격자가 조작하여 부정한 결제나 주문 처리를 유도하는 공격이다.
핵심 의미
결제 요청 변조 = 결제할 때 금액이나 주문 정보를 바꾸는 공격

발생 원인

결제 요청 변조는 보통 서버가 클라이언트 값을 신뢰할 때 발생합니다.

나쁜 방식
클라이언트가 보낸 상품금액을 그대로 결제금액으로 사용
클라이언트가 보낸 할인금액을 그대로 적용
클라이언트가 보낸 userId를 그대로 주문자 ID로 사용
안전한 방식
서버가 상품 DB에서 가격 조회
서버가 할인 정책 계산
서버가 배송비 계산
서버가 로그인 사용자 확인
서버가 최종 결제금액 산정

대응책

대응책설명
서버 측 금액 계산상품가격, 할인, 배송비를 서버에서 계산
주문정보 무결성 검증주문번호, 금액, 사용자, 상품 검증
클라이언트 값 신뢰 금지화면에서 온 금액을 그대로 사용하지 않음
결제 승인 결과 검증PG사 승인 결과와 서버 주문정보 비교
사용자 권한 검증본인 주문만 결제·취소 가능
할인·쿠폰 검증사용 가능 여부, 중복 사용 여부 확인
로그 기록주문, 결제, 환불 요청 기록
재전송 방지주문번호, Nonce, Timestamp, 중복 처리 방지
중요 기능 재인증고액 결제, 환불, 계좌 변경 등
실기형 답안
결제 요청 변조는 클라이언트가 전송한 가격, 수량, 할인, 주문번호, 결제금액 등을 공격자가 조작하여 부정 결제를 유도하는 공격이다. 대응 방안으로는 상품가격, 할인, 배송비, 최종 결제금액을 서버에서 계산하고, PG 승인 결과와 서버 주문정보를 비교 검증하며, 사용자 권한 확인, 쿠폰 사용 검증, 재전송 방지, 결제 로그 기록을 적용해야 한다.

가격 조작

가격 조작은 결제 요청 변조의 대표 사례입니다.

예를 들어 상품 가격이 100,000원인데 클라이언트 요청을 조작해 1,000원으로 바꾸는 상황입니다.

취약한 구조
price=1000

서버가 이 값을 그대로 믿으면 문제가 발생한다.

안전한 구조
서버가 상품 ID를 기준으로 DB에서 가격을 조회한다.
서버가 할인과 배송비를 계산한다.
서버가 최종 금액을 결정한다.
클라이언트 금액은 참고하지 않는다.
시험식 문장
가격 조작을 방지하기 위해 클라이언트가 전송한 가격이나 할인값을 신뢰하지 말고, 서버가 상품 DB와 정책을 기준으로 최종 결제금액을 계산해야 한다.

주문번호와 거래 식별자

전자상거래에서는 주문번호와 거래 식별자가 중요합니다.

주문번호는 다음 목적에 사용됩니다.

주문 식별
결제 승인 매칭
중복 처리 방지
환불 처리
분쟁 대응
로그 추적

보안상 주의할 점은 다음입니다.

위험설명
주문번호 예측 가능타인 주문 조회 시도 가능
중복 주문 처리같은 요청이 여러 번 처리됨
주문자 검증 누락타인 주문 취소·결제 가능
결제 승인 매칭 실패결제와 주문 상태 불일치
대응책
주문번호는 충분히 예측하기 어렵게 생성
주문번호와 로그인 사용자 매칭 검증
결제 승인 결과와 주문번호 매칭
중복 처리 방지
주문 상태 전이 검증

재전송 공격

전자상거래에서 재전송 공격이란?

재전송 공격은 정상적인 결제, 주문, 환불 요청을 공격자가 다시 보내 중복 처리나 부정 처리를 유발하는 공격입니다.

시험식 정의
재전송 공격은 정상적인 주문, 결제, 환불 요청을 가로채거나 재사용하여 동일 요청을 반복 처리하게 만드는 공격이다.

예를 들면 다음과 같은 문제가 발생할 수 있다.

같은 쿠폰이 여러 번 사용됨
같은 결제 승인 요청이 반복됨
같은 환불 요청이 중복 처리됨
같은 주문 상태 변경 요청이 반복됨

재전송 공격 대응책

대응책설명
Nonce한 번만 사용할 수 있는 임의 값
Timestamp요청 유효 시간 제한
서명값 검증요청 파라미터 위변조 확인
주문번호 중복 검증이미 처리된 주문 재처리 방지
Idempotency Key같은 요청이 여러 번 와도 한 번만 처리
상태 전이 검증결제 전 → 결제 완료 → 배송 등 순서 확인
서버 측 거래 기록 확인이미 승인·환불된 거래인지 확인
HTTPS요청 탈취 방지
로그 모니터링반복 요청 탐지
시험식 답안
전자상거래에서 재전송 공격은 정상 주문, 결제, 환불 요청을 반복 전송하여 중복 처리나 부정 처리를 유발하는 공격이다. 대응 방안으로는 Nonce, Timestamp, 서명값 검증, 주문번호 중복 확인, Idempotency Key, 거래 상태 전이 검증, HTTPS 적용, 반복 요청 로그 모니터링을 적용해야 한다.

결제 승인 검증

결제 시스템에서는 사용자가 결제 완료 화면을 봤다고 해서 서버가 결제를 믿으면 안 됩니다.

서버는 반드시 결제대행사나 결제 시스템의 승인 결과를 검증해야 합니다.

검증 항목은 다음입니다.

검증 항목설명
주문번호서버 주문과 결제 승인 주문번호 일치 여부
결제금액서버 산정 금액과 승인 금액 일치 여부
사용자주문자와 결제 요청자 일치 여부
상품 정보주문 상품과 승인 정보 일치 여부
결제 상태승인, 실패, 취소 상태 확인
거래 식별자PG 거래번호 중복 여부
서명값결제 결과 위변조 여부
시간요청 유효 시간 확인
시험식 문장
결제 완료 처리는 클라이언트 응답만 신뢰하지 말고, 서버가 결제대행사의 승인 결과를 조회하거나 검증하여 주문번호, 결제금액, 사용자, 거래번호, 서명값, 결제 상태가 서버 주문정보와 일치하는지 확인해야 한다.

환불·취소 보안

환불과 취소 기능도 매우 민감합니다.

공격자는 다음을 시도할 수 있습니다.

타인 주문 취소
환불 금액 조작
환불 계좌 변경
이미 환불된 주문 재환불
배송 완료 후 부정 취소
관리자 권한 없이 환불 승인

대응책은 다음입니다.

대책설명
사용자 권한 검증본인 주문만 취소 가능
관리자 승인일정 금액 이상 환불 승인 필요
상태 전이 검증환불 가능한 상태인지 확인
중복 환불 방지이미 환불된 거래 재처리 금지
금액 서버 검증환불 금액을 서버에서 계산
계좌 변경 재인증환불 계좌 변경 시 추가 인증
작업 로그 기록취소·환불 행위 추적
알림 발송사용자에게 취소·환불 알림
실기형 답안
환불·취소 기능은 금전 피해로 이어질 수 있으므로 사용자 권한과 주문 소유자를 검증하고, 주문 상태에 따라 허용 가능한 처리인지 확인해야 한다. 또한 환불 금액은 서버에서 계산하고, 중복 환불을 방지하며, 중요 환불은 관리자 승인과 재인증을 적용하고 모든 작업을 로그로 기록해야 한다.

쿠폰·포인트·할인 보안

전자상거래에서 쿠폰과 포인트도 공격 대상입니다.

위험 예시
같은 쿠폰 반복 사용
타인 쿠폰 사용
만료된 쿠폰 사용
할인율 조작
포인트 잔액 조작
쿠폰 사용 후 결제 실패 시 상태 불일치
대응책
쿠폰 소유자 검증
쿠폰 유효기간 검증
중복 사용 방지
사용 가능 조건 검증
포인트 잔액 서버 검증
사용 이력 기록
트랜잭션 처리
결제 실패 시 상태 복구
시험식 문장
쿠폰과 포인트는 클라이언트가 전달한 할인값을 신뢰하지 말고 서버에서 소유자, 유효기간, 사용 조건, 잔액, 중복 사용 여부를 검증해야 한다. 또한 사용 이력을 기록하고 결제 실패 시 상태를 복구할 수 있도록 트랜잭션 처리를 적용해야 한다.

전자상거래 로그 관리

전자상거래에서는 로그가 매우 중요합니다.

기록해야 할 로그는 다음입니다.

로그내용
로그인 로그사용자, IP, 시간, 성공·실패
주문 로그주문번호, 상품, 수량, 금액, 사용자
결제 요청 로그요청 시간, 금액, 결제수단, 거래번호
결제 승인 로그승인 결과, 승인 금액, 승인 번호
취소·환불 로그요청자, 금액, 사유, 승인자
쿠폰·포인트 로그사용·취소·복구 이력
관리자 작업 로그가격 변경, 환불 승인, 권한 변경
API 호출 로그IP, 사용자, 요청, 응답, 상태코드
오류 로그결제 실패, 승인 불일치, 중복 요청

로그 관리 원칙은 다음입니다.

거래 추적 가능성 확보
민감정보 마스킹
로그 무결성 보호
시간 동기화
권한 있는 관리자만 열람
분쟁 대응과 감사에 활용
실기형 답안
전자상거래 로그는 주문, 결제, 승인, 취소, 환불, 쿠폰·포인트 사용, 관리자 작업 이력을 기록하여 거래 추적과 분쟁 대응, 침해사고 분석에 활용된다. 로그에는 민감정보를 마스킹하고, 접근통제와 무결성 보호, 시간 동기화를 적용하여 신뢰성을 확보해야 한다.

전자상거래 보안 점검표

영역점검 항목
상품 가격서버 DB 기준 가격 계산
할인·쿠폰소유자, 유효기간, 중복 사용 검증
포인트잔액과 사용 이력 서버 검증
주문주문번호, 사용자, 상품, 수량 검증
결제PG 승인 결과와 서버 주문정보 비교
재전송 방지Nonce, Timestamp, Idempotency Key
취소·환불권한, 상태, 중복 환불 검증
API인증, 인가, Rate Limiting
로그주문·결제·환불·관리자 작업 기록
민감정보카드정보, 계좌정보, 개인정보 보호
관리자 기능MFA, IP 제한, 재인증, 작업 로그
장애 대응결제 실패, 중복 요청, 상태 불일치 복구

내용 연결 정리

쇼핑몰 결제 과정을 안전하게 처리하려면 다음 흐름이 필요합니다.

1. 사용자가 장바구니에서 결제를 요청한다.
2. 서버가 상품 가격, 수량, 할인, 배송비를 다시 계산한다.
3. 서버가 주문번호와 최종 결제금액을 생성한다.
4. 클라이언트는 결제대행사로 결제를 진행한다.
5. 결제 결과가 돌아오면 서버가 승인 결과를 검증한다.
6. 서버 주문정보와 승인 금액, 거래번호, 사용자 정보가 일치하는지 확인한다.
7. 중복 처리 여부를 확인한다.
8. 주문 상태를 결제 완료로 변경한다.
9. 모든 주문·결제·승인 로그를 기록한다.

안전하지 않은 구조는 다음입니다.

클라이언트가 보낸 금액을 그대로 믿음
결제 완료 응답을 검증하지 않음
같은 주문번호를 여러 번 처리함
환불 금액을 클라이언트 값으로 처리함
타인의 주문번호로 취소 요청이 가능함
관리자 작업 로그가 없음

시험에서는 다음 한 문장을 기억하면 됩니다.

전자상거래에서는 가격, 할인, 주문, 결제, 환불 등 금전과 관련된 모든 값과 상태를 서버에서 검증하고, 요청 위변조와 재전송을 방지하며, 거래 로그를 남겨야 한다.

시험에 나오는 포인트

주제시험 포인트
시큐어 코딩개발 단계에서 취약점 예방
입력값 검증서버 측 검증, 허용목록
출력값 인코딩XSS 방어 핵심
Prepared StatementSQL Injection 방어
오류 처리상세 오류 노출 제한
민감정보 보호암호화, 마스킹, 접근통제
로그 보안민감정보 제외, 무결성, 접근통제
보안 설정디버그 비활성화, 기본 계정 제거
전자상거래 보안가격·주문·결제 서버 검증
결제 요청 변조클라이언트 금액·주문값 조작
가격 조작 대응서버 DB 기준 금액 계산
결제 승인 검증PG 승인 정보와 서버 주문정보 비교
재전송 공격정상 요청 반복 처리
재전송 대응Nonce, Timestamp, Idempotency Key
환불 보안권한, 상태, 금액, 중복 환불 검증
쿠폰·포인트소유자, 유효기간, 중복 사용 검증
거래 로그주문, 결제, 환불, 관리자 작업 기록

필기형 문제풀이

문제 1

시큐어 코딩의 설명으로 가장 적절한 것은?

A. 개발 단계에서 보안 취약점을 예방하기 위해 보안 원칙을 적용하는 코딩 방식
B. 배포 후 WAF 정책만으로 코드 취약점을 모두 처리하는 방식
C. 클라이언트 화면에서 버튼을 숨겨 서버 권한 검증을 대체하는 방식
D. 입력값 검증 없이 오류 메시지만 자세히 기록하는 방식

정답: A

시큐어 코딩은 개발 단계에서 입력값 검증, 출력값 인코딩, 인증·인가, 오류 처리 등 보안 원칙을 적용하는 개발 방법입니다.


문제 2

입력값 검증에 대한 설명으로 적절한 것은?

A. 외부 입력값의 형식, 길이, 범위 등을 서버 측에서 확인한다
B. 클라이언트 검증만으로 충분하다
C. 모든 입력값을 무조건 허용한다
D. 서버 측 검증 없이 요청값을 업무 로직에 바로 사용한다

정답: A

클라이언트 검증은 우회 가능하므로 서버 측 입력값 검증이 필수입니다.


문제 3

XSS 방어에서 가장 핵심적인 시큐어 코딩 대책은?

A. 입력값을 SQL 문자열에 직접 연결
B. DB 권한 전체 부여
C. 출력값 인코딩
D. 운영 서버에서 디버그 모드 활성화

정답: C

XSS 방어의 핵심은 출력 문맥에 맞는 출력값 인코딩입니다.


문제 4

SQL Injection 방어에 가장 효과적인 방법은?

A. Prepared Statement 사용
B. SQL 문자열에 입력값 직접 연결
C. 상세 DB 오류를 사용자에게 표시
D. DB 계정에 모든 권한 부여

정답: A

Prepared Statement는 SQL 구조와 입력값을 분리하여 SQL Injection을 방지합니다.


문제 5

오류 처리 보안으로 적절한 것은?

A. 사용자에게 상세 서버 경로와 DB 오류를 모두 보여준다
B. 사용자에게 일반화된 오류 메시지를 제공하고 상세 오류는 로그에 기록한다
C. 오류 로그를 모두 삭제한다
D. 상세 오류를 응답 본문에 포함해 사용자가 직접 원인을 확인하게 한다

정답: B

상세 오류 정보는 공격자에게 힌트가 되므로 사용자에게 노출하지 않아야 합니다.


문제 6

민감정보 보호 대책으로 적절하지 않은 것은?

A. 암호화
B. 접근통제
C. 로그 마스킹
D. 비밀번호 평문 저장

정답: D

비밀번호는 평문 저장이 아니라 솔트 적용 해시값으로 저장해야 합니다.


문제 7

결제 요청 변조의 설명으로 가장 적절한 것은?

A. 클라이언트가 전송한 가격, 수량, 할인, 결제금액 등을 조작하는 공격
B. 브라우저에서 스크립트를 실행하는 공격
C. DNS 응답을 위조하는 공격
D. 네트워크 패킷을 도청하는 공격

정답: A

결제 요청 변조는 전자상거래에서 금액과 주문정보를 조작하는 대표적인 공격입니다.


문제 8

가격 조작 방지 대책으로 가장 적절한 것은?

A. 클라이언트가 보낸 가격을 그대로 신뢰한다
B. 서버가 상품 DB와 할인 정책을 기준으로 최종 금액을 계산한다
C. 할인 금액과 배송비를 클라이언트 요청값만 기준으로 적용한다
D. 결제 완료 화면의 표시 여부만으로 주문 상태를 완료 처리한다

정답: B

상품 가격, 할인, 배송비, 최종 결제금액은 서버에서 계산해야 합니다.


문제 9

재전송 공격 대응책으로 적절하지 않은 것은?

A. Nonce 사용
B. Timestamp 사용
C. Idempotency Key 사용
D. 동일 결제 요청을 무조건 반복 처리

정답: D

동일 요청 반복 처리는 재전송 공격 피해를 키웁니다.


문제 10

결제 승인 검증 시 확인해야 할 항목으로 적절하지 않은 것은?

A. 주문번호
B. 결제금액
C. 거래 식별자
D. 공격자가 입력한 임의 금액만 단독 신뢰

정답: D

서버는 결제대행사 승인 결과와 서버 주문정보를 비교 검증해야 합니다.


문제 11

환불·취소 보안 대책으로 적절한 것은?

A. 사용자 권한과 주문 소유자를 검증한다
B. 환불 금액을 클라이언트 값 그대로 처리한다
C. 이미 환불된 거래도 계속 환불한다
D. 환불 로그를 남기지 않는다

정답: A

환불·취소는 권한, 상태, 금액, 중복 여부를 검증하고 로그를 기록해야 합니다.


문제 12

전자상거래 로그 관리가 중요한 이유로 적절한 것은?

A. 거래 추적, 분쟁 대응, 침해사고 분석에 활용된다
B. 주문·결제 요청값을 검증하지 않고 그대로 처리하기 위해
C. 환불 승인 이력을 남기지 않아 중복 환불을 허용하기 위해
D. 관리자 작업 내역을 감사 대상에서 제외하기 위해

정답: A

전자상거래 로그는 주문·결제·환불 추적과 사고 분석에 중요합니다.


실기형 답안 훈련

실기 예제 1

문제: 시큐어 코딩의 개념과 주요 원칙을 설명하시오.

좋은 답안

시큐어 코딩은 소프트웨어 개발 과정에서 보안 취약점이 발생하지 않도록 입력값 검증, 출력값 인코딩, 인증·인가 검증, 안전한 SQL 처리, 오류 처리, 민감정보 보호 등을 적용하는 개발 방법이다. 이를 통해 SQL Injection, XSS, 접근통제 취약점, 정보 노출 등 주요 웹 취약점을 개발 단계에서 예방할 수 있다.

채점 포인트

요소포함 여부
개발 단계 보안필수
입력값 검증중요
출력값 인코딩중요
인증·인가중요
오류 처리·민감정보 보호좋음
취약점 예방필수

실기 예제 2

문제: 입력값 검증과 출력값 인코딩의 차이를 설명하시오.

좋은 답안

입력값 검증은 사용자나 외부 시스템으로부터 전달된 값이 허용된 형식, 길이, 범위에 맞는지 서버 측에서 확인하는 보안 조치이다. 출력값 인코딩은 사용자 입력값을 화면에 출력할 때 HTML, JavaScript, URL 등 문맥에 맞게 변환하여 브라우저가 코드가 아닌 문자로 처리하게 하는 조치로, XSS 방어에 중요하다.

채점 포인트

요소포함 여부
입력값 검증 = 형식·길이·범위 확인필수
서버 측 검증중요
출력값 인코딩 = 문맥별 변환필수
코드가 아닌 문자 처리중요
XSS 방어중요

실기 예제 3

문제: 오류 메시지 노출이 위험한 이유와 대응 방안을 설명하시오.

좋은 답안

상세 오류 메시지는 DB 종류, 테이블명, 컬럼명, 서버 경로, 내부 IP, 프레임워크 버전 등 내부 정보를 노출하여 공격자가 취약점을 파악하는 데 악용될 수 있다. 따라서 사용자에게는 일반화된 오류 메시지만 제공하고, 상세 오류는 서버 로그에 기록하여 접근권한이 있는 관리자만 확인하도록 해야 한다.

채점 포인트

요소포함 여부
DB 정보 노출중요
서버 경로·내부 정보 노출중요
공격자 악용 가능성필수
일반 오류 메시지필수
상세 오류는 로그 기록중요

실기 예제 4

문제: 결제 요청 변조의 개념과 대응 방안을 설명하시오.

좋은 답안

결제 요청 변조는 클라이언트가 전송한 가격, 수량, 할인, 주문번호, 결제금액 등을 공격자가 조작하여 부정 결제를 유도하는 공격이다. 대응 방안으로는 상품가격, 할인, 배송비, 최종 결제금액을 서버에서 계산하고, PG 승인 결과와 서버 주문정보를 비교 검증하며, 사용자 권한 확인, 쿠폰 사용 검증, 재전송 방지, 결제 로그 기록을 적용해야 한다.

채점 포인트

요소포함 여부
가격·수량·할인 조작필수
부정 결제중요
서버 측 금액 계산매우 중요
PG 승인 결과 검증중요
재전송 방지좋음
로그 기록좋음

실기 예제 5

문제: 전자상거래에서 재전송 공격의 개념과 대응 방안을 설명하시오.

좋은 답안

전자상거래에서 재전송 공격은 정상 주문, 결제, 환불 요청을 반복 전송하여 중복 결제, 중복 환불, 쿠폰 중복 사용 등 부정 처리를 유발하는 공격이다. 대응 방안으로는 Nonce, Timestamp, 서명값 검증, 주문번호 중복 확인, Idempotency Key, 거래 상태 전이 검증, HTTPS 적용, 반복 요청 로그 모니터링을 적용해야 한다.

채점 포인트

요소포함 여부
정상 요청 반복필수
중복 결제·환불중요
Nonce·Timestamp중요
중복 확인필수
Idempotency Key좋음
상태 전이 검증좋음

실기 예제 6

문제: 전자상거래 로그 관리의 필요성을 설명하시오.

좋은 답안

전자상거래 로그는 주문, 결제, 승인, 취소, 환불, 쿠폰·포인트 사용, 관리자 작업 이력을 기록하여 거래 추적, 분쟁 대응, 이상 거래 탐지, 침해사고 분석에 활용된다. 로그에는 민감정보를 마스킹하고, 접근통제와 무결성 보호, 시간 동기화를 적용하여 신뢰성을 확보해야 한다.

채점 포인트

요소포함 여부
주문·결제·환불 로그필수
거래 추적중요
분쟁 대응중요
사고 분석중요
민감정보 마스킹좋음
무결성·시간 동기화좋음

핵심 요약

개념한 줄 요약
시큐어 코딩개발 단계에서 보안 취약점을 예방하는 코딩 방식
입력값 검증외부 입력의 형식, 길이, 범위를 서버에서 확인
허용목록허용된 값만 통과시키는 방식
출력값 인코딩입력값이 코드가 아닌 문자로 처리되도록 변환
Prepared StatementSQL 구조와 입력값을 분리
오류 처리상세 내부 정보는 사용자에게 노출하지 않음
민감정보 보호최소 수집, 암호화, 마스킹, 접근통제
로그 보안민감정보 제외, 접근통제, 무결성 보호
보안 설정디버그 비활성화, 기본 계정 변경, 불필요 기능 제거
전자상거래 보안주문·결제·환불 과정의 무결성과 권한 검증
결제 요청 변조클라이언트 금액, 수량, 할인, 주문값 조작
가격 조작상품 금액을 공격자가 낮게 변경
서버 측 금액 계산DB와 정책 기준으로 최종 금액 산정
결제 승인 검증PG 승인 결과와 서버 주문정보 비교
재전송 공격정상 요청을 반복 전송해 중복 처리 유발
Nonce한 번만 사용하는 임의 값
Timestamp요청 유효 시간 검증
Idempotency Key동일 요청 중복 처리 방지
환불 보안권한, 상태, 금액, 중복 환불 검증
전자상거래 로그주문·결제·환불 추적과 사고 분석에 활용

필수 암기 문장

아래 문장들은 필기와 실기 모두 중요합니다.

시큐어 코딩은 소프트웨어 개발 과정에서 보안 취약점이 발생하지 않도록 입력값 검증, 출력값 인코딩, 인증·인가, 오류 처리, 암호화 등 보안 원칙을 적용하는 개발 방법이다.

클라이언트 측 검증은 우회 가능하므로 모든 입력값은 서버 측에서 검증해야 한다.

입력값 검증은 차단목록보다 허용목록 방식을 적용하는 것이 바람직하다.

출력값 인코딩은 사용자 입력값이 브라우저에서 실행 가능한 코드가 아니라 문자로 처리되도록 변환하는 조치이며 XSS 방어에 중요하다.

오류 메시지는 DB 정보, 서버 경로, 내부 IP 등 상세 정보를 사용자에게 노출하지 말고 일반화된 메시지를 제공해야 한다.

민감정보는 최소한만 수집하고 저장 시 암호화 또는 해시를 적용하며, 로그와 화면에는 마스킹해야 한다.

운영 환경에서는 디버그 모드를 비활성화하고 기본 계정과 기본 비밀번호를 변경하며 불필요한 기능과 테스트 페이지를 제거해야 한다.

전자상거래에서는 가격, 할인, 배송비, 결제금액을 클라이언트 값이 아니라 서버에서 계산해야 한다.

결제 완료 처리는 클라이언트 응답만 신뢰하지 말고 결제대행사 승인 결과와 서버 주문정보를 비교 검증해야 한다.

재전송 공격 대응을 위해 Nonce, Timestamp, 주문번호 중복 확인, Idempotency Key, 거래 상태 전이 검증을 적용해야 한다.

환불·취소 기능은 사용자 권한, 주문 소유자, 주문 상태, 환불 금액, 중복 환불 여부를 서버에서 검증해야 한다.

전자상거래 로그는 주문, 결제, 승인, 취소, 환불, 관리자 작업 이력을 기록하여 거래 추적과 침해사고 분석에 활용해야 한다.

연습 과제

다음 문제를 풀고 정답 및 해설과 대조한다.

A. 단답형

1. 시큐어 코딩이란 무엇인가?
2. 시큐어 코딩의 주요 원칙 7가지를 쓰시오.
3. 입력값 검증이란 무엇인가?
4. 클라이언트 측 검증만으로 충분하지 않은 이유는 무엇인가?
5. 허용목록 방식과 차단목록 방식의 차이를 쓰시오.
6. 출력값 인코딩이란 무엇인가?
7. 출력값 인코딩이 XSS 방어에 중요한 이유는 무엇인가?
8. SQL Injection 방지를 위한 시큐어 코딩 대책 4가지를 쓰시오.
9. 인증·인가 보안에서 서버 측 검증이 중요한 이유는 무엇인가?
10. 오류 메시지 노출이 위험한 이유는 무엇인가?
11. 민감정보 보호 원칙 5가지를 쓰시오.
12. 로그에 민감정보를 평문으로 기록하면 안 되는 이유는 무엇인가?
13. 운영 환경에서 제거하거나 비활성화해야 할 보안 설정 예시 5가지를 쓰시오.
14. 전자상거래 보안에서 서버가 검증해야 할 값 5가지를 쓰시오.
15. 결제 요청 변조란 무엇인가?
16. 가격 조작을 방지하기 위한 방법을 쓰시오.
17. 결제 승인 검증 시 확인해야 할 항목 5가지를 쓰시오.
18. 재전송 공격이란 무엇인가?
19. 전자상거래에서 재전송 공격 대응 방안 5가지를 쓰시오.
20. 환불·취소 보안 대책 5가지를 쓰시오.
21. 쿠폰·포인트 보안에서 검증해야 할 항목 5가지를 쓰시오.
22. 전자상거래 로그에 기록해야 할 항목 5가지를 쓰시오.
23. 전자상거래 로그 관리 시 보안 대책 4가지를 쓰시오.

B. 상황 매칭 문제

아래 상황에 적합한 취약점 또는 대응책을 쓴다.

24. 브라우저 JavaScript에서만 입력값을 검증하고 서버에서는 검증하지 않는다.
25. 검색어가 HTML 페이지에 그대로 출력되어 스크립트가 실행될 수 있다.
26. SQL문에 사용자 입력값을 문자열로 직접 붙이고 있다.
27. 서버 오류 화면에 DB 테이블명과 서버 경로가 표시된다.
28. 로그에 비밀번호와 인증 토큰이 평문으로 기록되고 있다.
29. 운영 서버에서 디버그 모드가 켜져 있고 테스트 페이지가 공개되어 있다.
30. 클라이언트가 보낸 price 값을 그대로 결제금액으로 사용하고 있다.
31. 상품 가격 100,000원을 요청 조작으로 1,000원으로 바꾸어 결제했다.
32. 결제 완료 화면만 보고 서버가 결제 완료 처리한다.
33. 같은 환불 요청이 여러 번 전송되어 중복 환불되었다.
34. 쿠폰 소유자와 유효기간을 확인하지 않고 할인을 적용한다.
35. 관리자가 환불을 처리했지만 작업 로그가 남지 않는다.

C. 실기형 답안 작성

다음 6문제는 2~3문장으로 답안을 작성한다.

36. 시큐어 코딩의 개념과 주요 원칙을 설명하시오.

37. 입력값 검증과 출력값 인코딩의 차이를 설명하시오.

38. 오류 메시지 노출이 위험한 이유와 대응 방안을 설명하시오.

39. 결제 요청 변조의 개념과 대응 방안을 설명하시오.

40. 전자상거래에서 재전송 공격의 개념과 대응 방안을 설명하시오.

41. 전자상거래 로그 관리의 필요성을 설명하시오.


보완 학습 및 연습 과제 정답

결제 검증, 멱등성, 보안 점검 방식

전자상거래 결제는 클라이언트의 금액, 상품명, 할인값, 결제완료 화면을 신뢰하지 않는다. 서버는 주문 원장 기준 금액, 상품 수량, 쿠폰 소유자, 포인트 잔액, 결제 승인번호, PG사 승인 금액, 결제 상태를 서버 간 검증으로 대조해야 한다.

멱등성 키는 동일 요청이 여러 번 도착해도 결과가 한 번만 반영되게 하는 식별자이다. 결제, 환불, 포인트 차감, 쿠폰 사용처럼 중복 처리 위험이 큰 기능은 요청별 고유 키, 처리 상태 저장, 중복 요청 거부 또는 동일 결과 반환을 적용한다.

SAST는 소스코드나 빌드 산출물을 정적으로 분석하고, DAST는 실행 중인 애플리케이션을 동적으로 진단한다. SCA는 오픈소스 구성요소와 취약 버전을 점검하고, Secret Scanning은 코드와 저장소에 포함된 API Key, 토큰, 개인키를 탐지한다.

정답 및 해설

A. 단답형 예시 정답: 1 보안을 고려한 개발 방식. 2 입력검증, 출력인코딩, 인증, 인가, 오류처리, 민감정보보호, 로깅. 3 형식·길이·범위 확인. 4 우회 가능. 5 허용값만 통과와 위험값 차단. 6 출력 문맥에 맞게 문자화. 7 스크립트 실행 방지. 8 Prepared Statement, 검증, 최소권한, 오류 제한. 9 클라이언트 조작 가능. 10 내부정보 노출. 11 최소수집, 암호화, 마스킹, 접근통제, 로그제한. 12 유출 시 피해 확대. 13 디버그, 샘플, 기본계정, 디렉터리 listing, 불필요 포트. 14 금액, 상품, 수량, 쿠폰, 결제승인. 15 요청값 조작. 16 서버 원장 기준 검증. 17 승인번호, 금액, 주문번호, 상태, 서명. 18 같은 요청 재전송. 19 nonce, timestamp, 멱등성 키, 상태검증, 중복거부. 20 권한, 금액, 원거래, 중복, 로그. 21 소유자, 유효기간, 중복사용, 잔액, 정책. 22 사용자, 주문, 금액, 승인, IP. 23 접근통제, 마스킹, 무결성, 보관기간.

B. 상황 매칭 정답: 24 서버 검증 누락, 25 출력 인코딩 누락, 26 SQL Injection 위험, 27 오류 메시지 노출, 28 민감정보 로그 노출, 29 운영 보안설정 미흡, 30 결제 요청 변조, 31 가격 조작, 32 서버 간 승인 검증 누락, 33 멱등성 부재와 재전송 공격, 34 쿠폰 검증 미흡, 35 감사 로그 미흡.

C. 실기형 채점 기준: 핵심 키워드는 서버 측 검증, 원장 기준 대조, PG사 서버 간 검증, 멱등성 키, 재전송 방지, SAST·DAST·SCA·Secret Scanning, 로그 마스킹이다. 부분점은 개념 25%, 원인 20%, 대응 40%, 운영·점검 15%로 부여한다. 클라이언트 검증이나 결제완료 화면만 신뢰한다고 쓰면 감점한다.

어플리케이션보안 파트 정리

지금까지 어플리케이션보안 5절을 마쳤습니다.

주제
4장 1절웹 구조와 HTTP 보안
4장 2절SQL Injection
4장 3절XSS, CSRF, 파일 업로드 취약점
4장 4절인증·인가·API 보안
4장 5절시큐어 코딩과 전자상거래 보안

어플리케이션보안의 핵심 축은 다음입니다.

입력값 검증
출력값 인코딩
인증
인가
세션
토큰
파일 업로드
API 보안
민감정보 보호
로그 분석
시큐어 코딩

필기에서는 용어와 대응책 매칭이 중요하고, 실기에서는 아래 구조로 답안을 구성한다.

공격 또는 취약점의 개념
→ 발생 원인
→ 피해
→ 대응 방안
예를 들어
SQL Injection은 입력값에 SQL 구문을 삽입하여 DB를 공격하는 취약점이다.
주요 원인은 사용자 입력값을 SQL 문자열에 직접 결합하는 것이다.
대응 방안으로는 Prepared Statement, 입력값 검증, DB 권한 최소화, 오류 메시지 제한, WAF 적용이 있다.

목차

학습 목표
학습 내용의 큰 그림
시큐어 코딩이란?
시큐어 코딩의 핵심 원칙
입력값 검증
입력값 검증이란?
클라이언트 검증과 서버 검증
허용목록 방식
출력값 인코딩
출력값 인코딩이란?
문맥별 인코딩
SQL 처리 보안
인증·인가 보안
오류 처리 보안
민감정보 보호
민감정보란?
저장 시 보호
전송 시 보호
로그 보안
보안 설정
시큐어 코딩 점검표
전자상거래 보안의 큰 그림
결제 요청 변조
결제 요청 변조란?
발생 원인
대응책
가격 조작
주문번호와 거래 식별자
재전송 공격
전자상거래에서 재전송 공격이란?
재전송 공격 대응책
결제 승인 검증
환불·취소 보안
쿠폰·포인트·할인 보안
전자상거래 로그 관리
전자상거래 보안 점검표
내용 연결 정리
시험에 나오는 포인트
필기형 문제풀이
문제 1
문제 2
문제 3
문제 4
문제 5
문제 6
문제 7
문제 8
문제 9
문제 10
문제 11
문제 12
실기형 답안 훈련
실기 예제 1
좋은 답안
채점 포인트
실기 예제 2
좋은 답안
채점 포인트
실기 예제 3
좋은 답안
채점 포인트
실기 예제 4
좋은 답안
채점 포인트
실기 예제 5
좋은 답안
채점 포인트
실기 예제 6
좋은 답안
채점 포인트
핵심 요약
필수 암기 문장
연습 과제
A. 단답형
B. 상황 매칭 문제
C. 실기형 답안 작성
보완 학습 및 연습 과제 정답
결제 검증, 멱등성, 보안 점검 방식
정답 및 해설
어플리케이션보안 파트 정리