-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsql.html
More file actions
184 lines (180 loc) · 7.52 KB
/
sql.html
File metadata and controls
184 lines (180 loc) · 7.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Team_웹프로그루밍_sql</title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<header class="header">
<h1 class="header-title">SQL Injection</h1>
</header>
<nav class="nav">
<ul class="nav-list">
<li><a href="index.html" class="nav-link">Home</a></li>
<li><a href="team.html" class="nav-link">Team</a></li>
<li><a href="skill.html" class="nav-link">Skill</a></li>
</ul>
</nav>
<main class="main-container">
<section class="content">
<div class="content-container">
<div class="content-data">
<h3 class="subtitle">SQL Injection</h3>
<h1 class="title">개요</h1>
<p class="description">
SQL 인젝션은 공격자가 애플리케이션의 데이터베이스 쿼리에 악의적인
SQL 코드를 삽입할 수 있는 웹 보안 취약점입니다. 입력 필드에 악성
코드를 주입함으로써 공격자는 민감한 데이터를 조회하거나,
데이터베이스 내용을 수정하거나, 관리자 권한을 획득하는 등의
비인가된 작업을 수행할 수 있습니다.
</p>
</div>
<div class="content-image">
<img
src="img/SQL_1.png"
alt="SQL 인젝션 설명"
class="content-img"
/>
</div>
</div>
<div class="content-basic">
<h1 class="title">🚨 공격 조건과 작동 원리</h1>
<p class="description">
SQL 인젝션 공격이 성공하려면 다음 조건이 충족되어야 합니다:
</p>
<ul class="description">
<li>
애플리케이션이 사용자 입력을 적절히 검증하거나 매개변수화하지 않고
SQL 쿼리에 직접 사용해야 합니다.
</li>
<li>
공격자가 데이터베이스와 상호작용하는 입력 필드(예: 로그인 폼,
검색창)를 식별할 수 있어야 합니다.
</li>
<li>
데이터베이스 서버가 애플리케이션의 요청으로 악성 쿼리를 실행해야
합니다.
</li>
</ul>
<p class="description">공격은 일반적으로 다음 단계를 따릅니다:</p>
<ol class="description">
<li>
공격자가 취약한 입력 필드(예: 로그인 폼, 검색창)를 식별합니다.
</li>
<li>
공격자가 입력 필드에 악성 SQL 코드를 제출합니다. 예를 들어, 로그인
폼의 사용자 이름 필드에 <code>' OR '1'='1</code>을 입력하면 인증을
우회할 수 있습니다.
</li>
<li>
애플리케이션이 검증되지 않은 입력으로 SQL 쿼리를 구성하여 예상치
못한 동작을 유발합니다.
</li>
<li>
데이터베이스가 변경된 쿼리를 실행하여 민감한 데이터 노출, 레코드
수정 또는 기타 악의적인 작업을 수행합니다.
</li>
</ol>
<div class="example">
<h3 class="card-title">예제</h3>
<p class="description">
애플리케이션이 다음과 같은 SQL 쿼리를 구성하는 로그인 폼을 생각해
봅시다:
</p>
<code class="description"
>SELECT * FROM users WHERE username = 'input' AND password =
'input';</code
>
<p class="description">
공격자가 사용자 이름 필드에 <code>' OR '1'='1' --</code>를
입력하면 쿼리는 다음과 같이 변합니다:
</p>
<code class="description"
>SELECT * FROM users WHERE username = '' OR '1'='1' --' AND
password = 'input';</code
>
<p class="description">
<code>--</code>는 쿼리의 나머지 부분을 주석 처리하고,
<code>'1'='1'</code>은 항상 참이므로, 공격자는 유효한 자격 증명
없이 로그인할 수 있습니다.
</p>
</div>
</div>
<div class="content-counter">
<h1 class="title">🔒 예방 방법</h1>
<div class="card-container">
<div class="card">
<h2 class="card-title">Prepared Statement</h2>
<p class="description">
Prepared Statement를 사용하여 SQL 코드와 사용자 입력을 분리하고,
입력이 실행 가능한 코드가 아닌 데이터로 처리되도록 합니다.
</p>
</div>
<div class="card">
<h2 class="card-title">입력 검증 및 정제</h2>
<p class="description">
모든 사용자 입력을 예상된 형식에 맞게 검증하고 정제하여 특수
문자를 필터링합니다.
</p>
</div>
<div class="card">
<h2 class="card-title">사용자 입력 이스케이프</h2>
<p class="description">
매개변수화 쿼리가 불가능한 경우, 사용자 입력의 특수 문자를
적절히 이스케이프하여 쿼리 구조를 변경하지 못하도록 합니다.
</p>
</div>
<div class="card">
<h2 class="card-title">최소 권한 원칙</h2>
<p class="description">
애플리케이션에 필요한 최소한의 데이터베이스 권한만 부여하여 공격
성공 시 영향을 줄입니다.
</p>
</div>
<div class="card">
<h2 class="card-title">ORM 사용</h2>
<p class="description">
SQLAlchemy나 Hibernate와 같은 객체-관계 매핑(ORM) 도구는 SQL
인젝션에 대한 내장 보호 기능을 제공합니다.
</p>
</div>
</div>
</div>
</section>
<section class="related-topics">
<h2 class="section-title">다른 주제 탐색</h2>
<div class="card-container">
<a href="xss.html" class="card-button">
<div class="card">
<h3 class="card-title">XSS</h3>
<p class="card-description">
크로스 사이트 스크립팅과 예방 방법에 대해 알아보세요.
</p>
</div>
</a>
<a href="csrf.html" class="card-button">
<div class="card">
<h3 class="card-title">CSRF</h3>
<p class="card-description">
사이트 간 요청 위조와 방어 전략을 이해하세요.
</p>
</div>
</a>
<a href="command.html" class="card-button">
<div class="card">
<h3 class="card-title">커맨드 인젝션</h3>
<p class="card-description">
커맨드 인젝션 위험과 예방 방법을 알아보세요.
</p>
</div>
</a>
</div>
</section>
</main>
<footer class="footer">
<p>Team_웹프로그루밍</p>
</footer>
</body>
</html>