CSRF ํ ํฐ ์ด๋
CSRF ํ ํฐ์ ํฌ๋ก์ค ์ฌ์ดํธ ์์ฒญ ์์กฐ(Cross-Site Request Forgery, CSRF) ๊ณต๊ฒฉ์ ๋ฐฉ์ดํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๊ณ ์ ํ ๋๋ค ๋ฌธ์์ด์
๋๋ค. ์๋ฒ์์ ์์ฑ๋์ด ์ฌ์ฉ์ ์ธ์
๊ณผ ์ฐ๊ฒฐ๋๋ฉฐ, ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์์ฒญ(์: ํผ ์ ์ถ, AJAX ํธ์ถ)์ ๋ณด๋ผ ๋ ์ด ํ ํฐ์ ํจ๊ป ์ ์กํ์ฌ ์์ฒญ์ ์ ํจ์ฑ์ ๊ฒ์ฆํฉ๋๋ค.
CSRF ํ ํฐ์ ์ผ๋ฐ์ ์ธ ํ๋ฆ
๐ ์๋ฒ์์ CSRF ํ ํฐ ์์ฑ
- ์ฌ์ฉ์๊ฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ํ๋ฉด, ์๋ฒ๋ ํด๋น ์ฌ์ฉ์ ์ธ์ ์ ๊ณ ์ ํ CSRF ํ ํฐ์ ์์ฑํฉ๋๋ค.
- ์ด ํ ํฐ์ ์๋ฒ์ ์ธ์ ์ ์ ์ฅ๋ฉ๋๋ค(์: ์ธ์ ID์ ์ฐ๊ณ๋ ์๋ฒ ๋ฉ๋ชจ๋ฆฌ, ๋ฐ์ดํฐ๋ฒ ์ด์ค, ๋๋ ์บ์).
- ์๋ฒ ์ธ์ ์ ์ฌ์ฉ์๋ง๋ค ๊ณ ์ ํ๋ฉฐ, ์๋ฒ๊ฐ ๊ด๋ฆฌํ๋ ์ํ ์ ์ฅ์์ ๋๋ค.
๐ ํด๋ผ์ด์ธํธ๋ก CSRF ํ ํฐ ์ ๋ฌ
์๋ฒ๋ ์์ฑํ CSRF ํ ํฐ์ ํด๋ผ์ด์ธํธ(ํ๋ก ํธ์๋)๋ก ์ ์กํฉ๋๋ค. ์ด๋ ๋ณดํต ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค:
- HTML ํผ์ ์จ๊ฒจ์ง ํ๋()๋ก ํฌํจ.
- AJAX ์์ฒญ์ ์ํด HTTP ํค๋(์: X-CSRF-Token)๋ก ์ ๋ฌ.
- ์ฟ ํค๋ก ์ ์ก(๋จ, ์ฟ ํค ์์ฒด๋ CSRF ๋ฐฉ์ง์ ์ง์ ์ฌ์ฉ๋์ง ์์).
ํด๋ผ์ด์ธํธ๋ ์ด ํ ํฐ์ ๋ฐ์์ ์ ์ฅํฉ๋๋ค. ์ด ์ ์ฅ์ ์ฃผ๋ก ํ๋ก ํธ์๋์ ๋ฉ๋ชจ๋ฆฌ(์: JavaScript ๋ณ์)๋ HTML ํผ์ ์ผ์์ ์ผ๋ก ์ ์ง๋๋ฉฐ, ํ๋ก ํธ์๋์ ์ธ์
์คํ ๋ฆฌ์ง๋ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์ ์ฅํ๋ ๊ฒฝ์ฐ๋ ๋๋ญ
๋๋ค(๋ณด์์ ๊ถ์ฅ๋์ง ์์).
๐ ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ ์ ์ก
- ์ฌ์ฉ์๊ฐ ํผ์ ์ ์ถํ๊ฑฐ๋ AJAX ์์ฒญ์ ๋ณด๋ผ ๋, ํด๋ผ์ด์ธํธ๋ CSRF ํ ํฐ์ ์์ฒญ์ ํฌํจ์ํต๋๋ค.
- ์: POST ์์ฒญ์ ๋ฐ๋์ _csrf ํ๋๋ก ํฌํจ๋๊ฑฐ๋, ํค๋์ X-CSRF-Token์ผ๋ก ์ถ๊ฐ๋จ.
๐ ์๋ฒ์์ CSRF ํ ํฐ ๊ฒ์ฆ
- ์๋ฒ๋ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋ฐ์ CSRF ํ ํฐ์ ์๋ฒ ์ธ์ ์ ์ ์ฅ๋ ํ ํฐ๊ณผ ๋น๊ตํฉ๋๋ค.
- ํ ํฐ์ด ์ผ์นํ๋ฉด ์์ฒญ์ด ์ ํจํ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๊ณ ์ฒ๋ฆฌํฉ๋๋ค.
- ํ ํฐ์ด ์ผ์นํ์ง ์๊ฑฐ๋ ์์ผ๋ฉด ์์ฒญ์ ๊ฑฐ๋ถ(์: 403 Forbidden ์๋ต).
๐ ์ธ์ ์ ์ง ๋ฐ ํ ํฐ ๊ฐฑ์
์์ฒญ์ด ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌ๋ ํ, ์๋ฒ๋ ํ์์ ๋ฐ๋ผ ์๋ก์ด CSRF ํ ํฐ์ ์์ฑํ์ฌ ์ธ์
์ ์ ์ฅํ๊ณ ํด๋ผ์ด์ธํธ์ ์ ๋ฌํฉ๋๋ค.
์ด๋ ๋ณด์์ ๊ฐํํ๊ธฐ ์ํด ํ ํฐ์ ์ผํ์ฑ ๋๋ ์ฃผ๊ธฐ์ ์ผ๋ก ๊ฐฑ์ ํ๋ ๋ฐฉ์์
๋๋ค.
๐ ์์
<form method="POST" action="/update-profile"> <span class="point"><input type="hidden" name="_csrf" value="abc123xyz789"></span> <input type="text" name="username"> <button type="submit">์ ์ฅ</button> </form>
๐ ์์ : JavaScript (Fetch API)
<!DOCTYPE html> <html> <head> <title>CSRF AJAX Example</title> <!-- CSRF ํ ํฐ์ ๋ฉํ ํ๊ทธ๋ก ํฌํจ --> <meta name="csrf-token" content="3f9a8b2c-7e5d-4a1b-9c0f-1234567890ab"> </head> <body> <button onclick="submitData()">Submit via AJAX</button> <script> function submitData() { // ๋ฉํ ํ๊ทธ์์ CSRF ํ ํฐ ๊ฐ์ ธ์ค๊ธฐ const csrfToken = document.querySelector('meta[name="csrf-token"]').getAttribute('content'); fetch('/submit', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-CSRF-Token': csrfToken // CSRF ํ ํฐ์ ํค๋์ ์ถ๊ฐ }, body: JSON.stringify({ username: 'john' }) }) .then(response => response.text()) .then(data => console.log(data)) .catch(error => console.error('Error:', error)); } </script> </body> </html>
๋ ์๋ฒ์์ ์์ฑํ CSRF ํ ํฐ์ ํ๋ก ํธ์๋์ ์ ๋ฌํ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์
๋๋ค.
JavaScript์์ fetch๋ฅผ ์ฌ์ฉํ์ฌ POST ์์ฒญ์ ๋ณด๋ผ ๋, X-CSRF-Token ํค๋์ ํ ํฐ์ ์ถ๊ฐํฉ๋๋ค.
POST /submit HTTP/1.1 Host: example.com Content-Type: application/json X-CSRF-Token: 3f9a8b2c-7e5d-4a1b-9c0f-1234567890ab
๐ HTTP ์์ฒญ ํค๋
POST /submit HTTP/1.1 Host: example.com Content-Type: application/json X-CSRF-Token: 3f9a8b2c-7e5d-4a1b-9c0f-1234567890ab
๐ ์์ฒญ ๋ฐ๋
{"username":"john"}
์๋ฒ๋ _csrf ๊ฐ์ด ์ธ์
์ ํ ํฐ๊ณผ ์ผ์นํ๋์ง ํ์ธ ํ ์์ฒญ์ ์ฒ๋ฆฌํฉ๋๋ค.
CSRF ํ ํฐ์ ์ค์์ฑ
- ๊ณต๊ฒฉ ๋ฐฉ์ด: ๊ณต๊ฒฉ์๊ฐ ์ฌ์ฉ์์ ์ธ์ฆ ์ฟ ํค๋ฅผ ์ ์ฉํด ์์กฐ ์์ฒญ์ ๋ณด๋ด๋๋ผ๋, CSRF ํ ํฐ์ด ์์ผ๋ฉด ์๋ฒ๊ฐ ์์ฒญ์ ๊ฑฐ๋ถํฉ๋๋ค.
- ๊ฐ๋จํ ๊ตฌํ: ๋๋ถ๋ถ์ ์น ํ๋ ์์ํฌ(์: Spring, Django, Laravel)๋ CSRF ํ ํฐ ์์ฑ ๋ฐ ๊ฒ์ฆ ๊ธฐ๋ฅ์ ๊ธฐ๋ณธ ์ ๊ณตํฉ๋๋ค.
๐ ์ถ๊ฐ ๊ณ ๋ ค์ฌํญ
- ๋ณด์: ํ ํฐ์ด ๋ ธ์ถ๋์ง ์๋๋ก HTTPS๋ฅผ ์ฌ์ฉํ๊ณ , GET ์์ฒญ์ ํฌํจ์ํค์ง ์์ต๋๋ค.
- ์ฌ์ฉ์ฑ: AJAX ์์ฒญ์์๋ ํค๋๋ก ํ ํฐ์ ์ ์กํ๋ ๋ฐฉ์์ด ์ผ๋ฐ์ ์ ๋๋ค.
- SameSite ์ฟ ํค์ ์กฐํฉ: CSRF ํ ํฐ ์ธ์ SameSite ์์ฑ์ ์ฟ ํค์ ์ค์ ํ๋ฉด ์ถ๊ฐ์ ์ธ ๋ณดํธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ฟ ํค ์์ฑ ์ค์ (SameSite)
์ฟ ํค์ SameSite ์์ฑ์ ์ค์ ํ์ฌ ๋์ผ ์ถ์ฒ(Same-Origin) ๋๋ ์ ํ๋ ์กฐ๊ฑด์์๋ง ์ฟ ํค๊ฐ ์ ์ก๋๋๋ก ํฉ๋๋ค.
- Strict: ๋์ผ ๋๋ฉ์ธ์์๋ง ์ฟ ํค ์ ์ก ๊ฐ๋ฅ.
- Lax: ๋์ผ ๋๋ฉ์ธ ์ธ์ GET ์์ฒญ(์: ๋งํฌ ์ด๋)์์๋ง ์ฟ ํค ์ ์ก ๊ฐ๋ฅ.
- None: ๋ชจ๋ ์์ฒญ์์ ์ฟ ํค ์ ์ก(๋จ, HTTPS์ Secure ์์ฑ ํ์)
SameSite=Lax ๋ ๋๋ถ๋ถ์ CSRF ๋ฐฉ์ด์ ์ ํฉํ๋ฉฐ, ์ฌ์ฉ์ ๊ฒฝํ์ ํด์น์ง ์์ผ๋ฉด์ ๋ณด์์ ๊ฐํํฉ๋๋ค. SameSite=Strict๋ ๋ ๊ฐ๋ ฅํ์ง๋ง, ์ธ๋ถ ๋งํฌ๋ฅผ ํตํ ์ ๊ทผ ์ ์ฟ ํค๊ฐ ์ ์ก๋์ง ์์ ๊ธฐ๋ฅ์ ์ ์ฝ์ด ์์ ์ ์์ต๋๋ค.
- HTTP ๋ฉ์๋ ์ ํ: ์ํ ๋ณ๊ฒฝ ์์ฒญ(์: ๋ ์ด์ฒด, ๊ณ์ ์์ )์ POST, PUT, DELETE์ ๊ฐ์ ๋ฉ์๋๋ง ํ์ฉํ๊ณ , GET ์์ฒญ์ ์ํ ๋ณ๊ฒฝ์ ์ ๋ฐํ์ง ์๋๋ก ์ค๊ณํฉ๋๋ค.
- Referer/Origin ํค๋ ๊ฒ์ฆ: ์์ฒญ์ ์ถ์ฒ๋ฅผ ํ์ธํ์ฌ ์ ๋ขฐํ ์ ์๋ ๋๋ฉ์ธ์์๋ง ์์ฒญ์ ํ์ฉํฉ๋๋ค. ๋จ, Referer ํค๋๋ ๋ธ๋ผ์ฐ์ ์ค์ ์ ๋ฐ๋ผ ๋๋ฝ๋ ์ ์์ผ๋ฏ๋ก ๋ณด์กฐ์ ์๋จ์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
XSS ๊ณต๊ฒฉ ์ด๋
XSS ๊ณต๊ฒฉ์ ์
์ฑ ์คํฌ๋ฆฝํธ๋ฅผ ์น ํ์ด์ง์ ์ฝ์
ํ์ฌ ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ์์ ์คํ๋๋๋ก ๋ง๋๋ ๊ณต๊ฒฉ์
๋๋ค. ์ด๋ฅผ ๋ฐฉ์ดํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๐ ์ ๋ ฅ ๊ฐ ์ ํจ์ฑ ๊ฒ์ฆ ๋ฐ ํน์๋ฌธ์ ์ด์ค์ผ์ดํ
์ฌ์ฉ์๋ก๋ถํฐ ์
๋ ฅ๋ฐ์ ๋ฐ์ดํฐ(์: ํ
์คํธ, URL, JSON ๋ฑ)์ ์ ํจ์ฑ์ ๊ฒ์ฆํ๊ณ , HTML, JavaScript, SQL ๋ฑ์์ ์คํ ๊ฐ๋ฅํ ํน์๋ฌธ์( <, >, ", ', & ๋ฑ)๋ฅผ ์ด์ค์ผ์ดํ ์ฒ๋ฆฌํฉ๋๋ค.
์ฌ์ฉ์๊ฐ ์
๋ ฅํ ๋ฐ์ดํฐ(์: ํ
์คํธ ํ๋, ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ)๋ฅผ ์๋ฒ ๋๋ ํด๋ผ์ด์ธํธ์์ ๋ฐ์ผ๋ฉด ์
๋ ฅ ๋ฐ์ดํฐ์ ํฌํจ๋ ํน์ ๋ฌธ์๋ฅผ ์์ ํ ๋ฌธ์(์: <)๋ก ๋ณํํ์ฌ ๋ณํ๋ ๋ฐ์ดํฐ๋ฅผ HTML, JavaScript ๋ฑ์ ๋ฌธ๋งฅ์์ ์ถ๋ ฅํ์ฌ ๋ธ๋ผ์ฐ์ ๊ฐ ์ด๋ฅผ ์ฝ๋๊ฐ ์๋ ํ
์คํธ๋ก ์ฒ๋ฆฌํ๋๋ก ํจ.
<!-- ์ ๋ ฅ: <script>alert('XSS')</script> --> <!-- ์ด์ค์ผ์ดํ ์ฒ๋ฆฌ ํ ์ถ๋ ฅ --> <script>alert('XSS')<script>
- ๋ธ๋ผ์ฐ์ ๋ ์๋ฅผ ๋ก ํ์ํ๋ฉฐ, ์คํํ์ง ์์.
ํด๋ผ์ด์ธํธ์ ์๋ฒ ๋ชจ๋์์ ์
๋ ฅ ๊ฒ์ฆ์ ์ํํด์ผ ํ๋ฉฐ ์๋ฒ์์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฅ ์ , ํด๋ผ์ด์ธํธ์์๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์ํด ๊ฒ์ฆํฉ๋๋ค. ์๋ฅผ ๋ค์ด,
๐ CSP(Content Security Policy) ์ค์
์๋ฒ์์ HTTP ์๋ต ํค๋์ CSP๋ฅผ ์ค์ ํ์ฌ ํ์ฉ๋ ์คํฌ๋ฆฝํธ, ์คํ์ผ, ์ด๋ฏธ์ง ๋ฑ์ ์ถ์ฒ๋ฅผ ์ ํํฉ๋๋ค.
Content-Security-Policy: script-src 'self' https://trusted.cdn.com;
CSP๋ ์ธ๋ผ์ธ ์คํฌ๋ฆฝํธ()๋ ์ธ๋ถ ์ถ์ฒ์ ์
์ฑ ์คํฌ๋ฆฝํธ ์คํ์ ์ฐจ๋จํฉ๋๋ค. 'strict-dynamic', 'nonce', 'hash'์ ๊ฐ์ ์ต์
์ ์ฌ์ฉํ๋ฉด ๋ ์ธ๋ฐํ ์ ์ด๊ฐ ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋ฌ๋ CSP ์ค์ ์ ์ ์คํ ์ค๊ณํด์ผ ํ๋ฉฐ, ๊ธฐ์กด ์ฝ๋์์ ํธํ์ฑ ๋ฌธ์ ๋ฅผ ํ
์คํธํด์ผ ํฉ๋๋ค.
- ์ถ๋ ฅ ์ด์ค์ผ์ดํ: ๋ฐ์ดํฐ๋ฅผ ๋ ๋๋งํ ๋ ๋ฌธ๋งฅ(HTML, ์์ฑ, JavaScript, CSS, URL ๋ฑ)์ ๋ง๊ฒ ์ด์ค์ผ์ดํ ์ฒ๋ฆฌํฉ๋๋ค. ์: HTML ์์ฑ์๋ ๋๋ธ์ฟผํ ์ด์ (")๋ฅผ &quot;๋ก ๋ณํ.
- ์์ ํ API ์ฌ์ฉ: innerHTML ๋์ textContent๋ setAttribute๋ฅผ ์ฌ์ฉํด ์คํฌ๋ฆฝํธ ์คํ์ ๋ฐฉ์งํฉ๋๋ค.
- ์ฟ ํค ๋ณดํธ: HttpOnly ์์ฑ์ ์ฟ ํค์ ์ค์ ํ์ฌ JavaScript์์ ์ฟ ํค์ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ์ ํํฉ๋๋ค.
- ํ๋ ์์ํฌ ๋ณด์: React, Angular ๋ฑ ํ๋ ํ๋ ์์ํฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก XSS ๋ฐฉ์ด๋ฅผ ์ ๊ณตํ์ง๋ง, dangerouslySetInnerHTML ๊ฐ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ๋๋ ์ฃผ์๊ฐ ํ์ํฉ๋๋ค.
๐ HTTPS๋ฅผ ํตํ ํต์ ๋ณด์
HTTP๋ ๋ฐ์ดํฐ๊ฐ ํ๋ฌธ์ผ๋ก ์ ์ก๋์ด ๋์ฒญ ๋ฐ ์กฐ์์ ์ทจ์ฝํฉ๋๋ค. HTTPS๋ SSL/TLS๋ฅผ ํตํด ํต์ ์ ์ํธํํ์ฌ ๋ณด์์ ๊ฐํํฉ๋๋ค.
๐ HTTPS ์ ์ฉ
HSTS๋ ์น ๋ธ๋ผ์ฐ์ ์๊ฒ ํด๋น ์ฌ์ดํธ๋ ํญ์ HTTPS๋ก๋ง ์ ์ํด์ผ ํ๋ค๊ณ ์ง์ํ๋ ๋ณด์ ๊ธฐ๋ฅ์
๋๋ค. ํ ๋ฒ ๋ธ๋ผ์ฐ์ ๊ฐ ์ด ํค๋๋ฅผ ๋ฐ์ผ๋ฉด, ์ดํ์ ์๋์ผ๋ก HTTP ์์ฒญ์ HTTPS๋ก ์
๊ทธ๋ ์ด๋ํฉ๋๋ค.
๐ HSTS ํค๋ ์์
์๋ฒ์์ ๋ค์๊ณผ ๊ฐ์ ํค๋๋ฅผ ์๋ต์ ์ถ๊ฐํฉ๋๋ค.
Strict-Transport-Security: max-age=31536000; includeSubDomains
HTTPS๋ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ๊ณผ ๊ธฐ๋ฐ์ฑ์ ๋ณด์ฅํ๋ฉฐ, CSRF์ XSS ๊ณต๊ฒฉ์์ ์ฟ ํค๋ ํ ํฐ์ด ํ์ทจ๋๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค. HSTS๋ ์ค๊ฐ์ ๊ณต๊ฒฉ(MITM)์ ์ค์ด๋ ๋ฐ ํจ๊ณผ์ ์
๋๋ค. ๋ํ, ์ต์ TLS ๋ฒ์ (์: TLS 1.3)๊ณผ ๊ฐ๋ ฅํ ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๐ ์ถ๊ฐ ๋ณด์ ๊ณ ๋ ค์ฌํญ
- ์ธ์ฆ์ ๊ด๋ฆฌ: ์ ๋ขฐํ ์ ์๋ ์ธ์ฆ ๊ธฐ๊ด(CA)์์ ๋ฐ๊ธ๋ฐ์ SSL/TLS ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ๊ณ , ๋ง๋ฃ ์ ์ ๊ฐฑ์ ํฉ๋๋ค.
- ํผํฉ ์ฝํ ์ธ ๋ฐฉ์ง: HTTPS ํ์ด์ง์์ HTTP ๋ฆฌ์์ค(์ด๋ฏธ์ง, ์คํฌ๋ฆฝํธ ๋ฑ)๋ฅผ ๋ก๋ํ์ง ์๋๋ก ์ฃผ์ํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ๋ ํผํฉ ์ฝํ ์ธ ๋ฅผ ์ฐจ๋จํ๊ฑฐ๋ ๊ฒฝ๊ณ ๋ฅผ ํ์ํ ์ ์์ต๋๋ค.
์ข ํฉ์ ์ธ ๋ณด์ ์ ๋ต
CSRF์ XSS ๋ฐฉ์ด๋ ๋จ์ผ ๊ธฐ๋ฒ์ ์์กดํ์ง ์๊ณ , ์ฌ๋ฌ ๋ฐฉ์ด ๊ณ์ธต์ ์กฐํฉํ์ฌ ์ ์ฉํ๋ ์ฌ์ธต ๋ฐฉ์ด(Defense-in-Depth) ์ ๋ต์ด ํ์ํฉ๋๋ค.
- ๊ฐ๋ฐ ๋จ๊ณ: ์ฝ๋ ๋ฆฌ๋ทฐ, ๋ณด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ, OWASP ๊ฐ์ด๋๋ผ์ธ ์ค์.
- ๋ฐฐํฌ ๋จ๊ณ: ๋ณด์ ํค๋ ์ค์ (CSP, HSTS, X-Frame-Options ๋ฑ), ์ทจ์ฝ์ ์ค์บ.
- ์ด์ ๋จ๊ณ: ๋ก๊ทธ ๋ชจ๋ํฐ๋ง, WAF(Web Application Firewall) ๋์ , ์ ๊ธฐ์ ์ธ ๋ณด์ ํจ์น.