HTML νΉμλ¬Έμ μ²λ¦¬
π HTML νΉμλ¬Έμ μ²λ¦¬
μΉ κ°λ°μ νλ€ λ³΄λ©΄ νκ·Έμ νΉμ λ¬Έμμ΄μ λ£μμ λ, μλν κ°μ΄ μ λλ‘ μΆλ ₯λμ§ μλ κ²½μ°κ° μμ΅λλ€. λνμ μΌλ‘ <
, >
κΈ°νΈκ° ν¬ν¨λ λ¬Έμμ΄μ΄ HTML νκ·Έλ‘ μΈμλμ΄ μ¬λΌμ§κ±°λ λ€λ₯Έ ννλ‘ λ λλ§λλ λ¬Έμ κ° μμ΅λλ€.
π λ¬Έμ μν©
μλ₯Ό λ€μ΄, μλμ κ°μ μ½λλ₯Ό μκ°ν΄λ΄ μλ€.
<div> <script> </div>
μ΄λ κ² μμ±νλ©΄ λΈλΌμ°μ λ <script>
λ₯Ό HTML νκ·Έλ‘ μΈμν΄ λ λλ§ κ³Όμ μμ 무μνκ±°λ μν μμλ‘ νλ¨ν©λλ€. κ²°κ³Όμ μΌλ‘ μ¬μ©μκ° λ³΄κ² λλ κ°μ λΉ λ¬Έμμ΄μ΄κ±°λ, <script>
νκ·Έλ‘ μΈν΄ 보μ μ΄μκΉμ§ λ°μν μ μμ΅λλ€.
π€ μ μ΄λ° λ¬Έμ κ° μκΈΈκΉ?
HTML λ¬Έλ²μμ <
, >
λ νκ·Έμ μμκ³Ό λμ μλ―Ένλ νΉμ λ¬Έμμ
λλ€. μ΄ κ°μ΄ input
μ value
μμ±μ κ·Έλλ‘ λ€μ΄κ°λ©΄, λΈλΌμ°μ λ μ΄λ₯Ό λ§ν¬μ
ꡬ쑰μ μΌλΆλ‘ ν΄μν΄ μ€μ κ°μΌλ‘ μΈμνμ§ μμ΅λλ€. μ΄λ₯Ό λ°©μ§νλ €λ©΄ μ΄μ€μΌμ΄ν λ¬Έμ(escape character) λ‘ μΉνν΄μ€μΌ ν©λλ€.
β ν΄κ²° λ°©λ²: νΉμλ¬Έμ μ΄μ€μΌμ΄ν μ²λ¦¬
HTMLμμ μ£Όμ νΉμλ¬Έμλ λ€μκ³Ό κ°μ΄ μ΄μ€μΌμ΄ν μμΌμΌ μμ νκ² μ¬μ©ν μ μμ΅λλ€:
λ¬Έμ | μ΄μ€μΌμ΄ν μ½λ |
---|---|
< |
< |
> |
> |
& |
& |
" |
" |
' |
' |
μμ μμ :
<div> <script></div>
μ΄λ κ² λ°κΎΈλ©΄ λΈλΌμ°μ λ <script>
λ₯Ό λ¨μ λ¬Έμμ΄λ‘ μΈμνκ³ νλ©΄μ κ·Έλλ‘ μΆλ ₯ν©λλ€.
π οΈ μλ°μ€ν¬λ¦½νΈλ‘ μ΄μ€μΌμ΄ν μ²λ¦¬νκΈ°
μλ²λ νλ‘ νΈμμ μ¬μ©μ μ λ ₯κ°μ μ²λ¦¬ν λ, μλ°μ€ν¬λ¦½νΈλ₯Ό νμ©ν΄μ νΉμλ¬Έμλ₯Ό μ΄μ€μΌμ΄νν μλ μμ΅λλ€.
function escapeHtml(str) {
return str
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
}
const unsafe = "<script>alert('XSS')</script>";
const safe = escapeHtml(unsafe);
document.querySelector("input").value = safe;
π 보μ κ΄μ μμμ μ€μμ±
μ΄λ¬ν μ²λ¦¬λ λ¨μν νλ©΄ νμ λ¬Έμ λΏ μλλΌ, XSS(Cross Site Scripting) κ°μ 보μ μνμ λ°©μ§νλ λ°λ μ€μν©λλ€. μ¬μ©μ μ λ ₯κ°μ΄ HTML ꡬ쑰μ 무방λΉλ‘ μ½μ λλ©΄, μ μ± μ€ν¬λ¦½νΈκ° μ€νλ μ μκΈ° λλ¬Έμ λλ€.