μΉ΄ν…Œκ³ λ¦¬ μ—†μŒ

HTML 특수문자 처리

silvereun 2025. 6. 17. 13:12

πŸ” HTML 특수문자 처리

μ›Ή κ°œλ°œμ„ ν•˜λ‹€ 보면 νƒœκ·Έμ— νŠΉμ • λ¬Έμžμ—΄μ„ λ„£μ—ˆμ„ λ•Œ, μ˜λ„ν•œ 값이 μ œλŒ€λ‘œ 좜λ ₯λ˜μ§€ μ•ŠλŠ” κ²½μš°κ°€ μžˆμŠ΅λ‹ˆλ‹€. λŒ€ν‘œμ μœΌλ‘œ <, > κΈ°ν˜Έκ°€ ν¬ν•¨λœ λ¬Έμžμ—΄μ΄ HTML νƒœκ·Έλ‘œ μΈμ‹λ˜μ–΄ μ‚¬λΌμ§€κ±°λ‚˜ λ‹€λ₯Έ ν˜•νƒœλ‘œ λ Œλ”λ§λ˜λŠ” λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€.

πŸ˜• 문제 상황

예λ₯Ό λ“€μ–΄, μ•„λž˜μ™€ 같은 μ½”λ“œλ₯Ό μƒκ°ν•΄λ΄…μ‹œλ‹€.

<div> <script> </div>

μ΄λ ‡κ²Œ μž‘μ„±ν•˜λ©΄ λΈŒλΌμš°μ €λŠ” <script>λ₯Ό HTML νƒœκ·Έλ‘œ 인식해 λ Œλ”λ§ κ³Όμ •μ—μ„œ λ¬΄μ‹œν•˜κ±°λ‚˜ μœ„ν—˜ μš”μ†Œλ‘œ νŒλ‹¨ν•©λ‹ˆλ‹€. 결과적으둜 μ‚¬μš©μžκ°€ 보게 λ˜λŠ” 값은 빈 λ¬Έμžμ—΄μ΄κ±°λ‚˜, <script> νƒœκ·Έλ‘œ 인해 λ³΄μ•ˆ μ΄μŠˆκΉŒμ§€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ€” μ™œ 이런 λ¬Έμ œκ°€ μƒκΈΈκΉŒ?

HTML λ¬Έλ²•μ—μ„œ <, >λŠ” νƒœκ·Έμ˜ μ‹œμž‘κ³Ό 끝을 μ˜λ―Έν•˜λŠ” 특수 λ¬Έμžμž…λ‹ˆλ‹€. 이 값이 input의 value 속성에 κ·ΈλŒ€λ‘œ λ“€μ–΄κ°€λ©΄, λΈŒλΌμš°μ €λŠ” 이λ₯Ό λ§ˆν¬μ—… ꡬ쑰의 μΌλΆ€λ‘œ 해석해 μ‹€μ œ κ°’μœΌλ‘œ μΈμ‹ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이λ₯Ό λ°©μ§€ν•˜λ €λ©΄ μ΄μŠ€μΌ€μ΄ν”„ 문자(escape character) 둜 μΉ˜ν™˜ν•΄μ€˜μ•Ό ν•©λ‹ˆλ‹€.

βœ… ν•΄κ²° 방법: 특수문자 μ΄μŠ€μΌ€μ΄ν”„ 처리

HTMLμ—μ„œ μ£Όμš” νŠΉμˆ˜λ¬ΈμžλŠ” λ‹€μŒκ³Ό 같이 μ΄μŠ€μΌ€μ΄ν”„ μ‹œμΌœμ•Ό μ•ˆμ „ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

문자 μ΄μŠ€μΌ€μ΄ν”„ μ½”λ“œ
< &lt;
> &gt;
& &amp;
" &quot;
' &#39;

μ˜ˆμ‹œ μˆ˜μ •:

<div> &lt;script&gt;</div>

μ΄λ ‡κ²Œ λ°”κΎΈλ©΄ λΈŒλΌμš°μ €λŠ” <script>λ₯Ό λ‹¨μˆœ λ¬Έμžμ—΄λ‘œ μΈμ‹ν•˜κ³  화면에 κ·ΈλŒ€λ‘œ 좜λ ₯ν•©λ‹ˆλ‹€.

πŸ› οΈ μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬ν•˜κΈ°

μ„œλ²„λ‚˜ ν”„λ‘ νŠΈμ—μ„œ μ‚¬μš©μž μž…λ ₯값을 μ²˜λ¦¬ν•  λ•Œ, μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό ν™œμš©ν•΄μ„œ 특수문자λ₯Ό μ΄μŠ€μΌ€μ΄ν”„ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

function escapeHtml(str) {
  return str
    .replace(/&/g, "&amp;")
    .replace(/</g, "&lt;")
    .replace(/>/g, "&gt;")
    .replace(/"/g, "&quot;")
    .replace(/'/g, "&#39;");
}

const unsafe = "<script>alert('XSS')</script>";
const safe = escapeHtml(unsafe);

document.querySelector("input").value = safe;

πŸ” λ³΄μ•ˆ κ΄€μ μ—μ„œμ˜ μ€‘μš”μ„±

μ΄λŸ¬ν•œ μ²˜λ¦¬λŠ” λ‹¨μˆœν•œ ν™”λ©΄ ν‘œμ‹œ 문제뿐 μ•„λ‹ˆλΌ, XSS(Cross Site Scripting) 같은 λ³΄μ•ˆ μœ„ν˜‘μ„ λ°©μ§€ν•˜λŠ” 데도 μ€‘μš”ν•©λ‹ˆλ‹€. μ‚¬μš©μž μž…λ ₯값이 HTML ꡬ쑰에 λ¬΄λ°©λΉ„λ‘œ μ‚½μž…λ˜λ©΄, μ•…μ„± μŠ€ν¬λ¦½νŠΈκ°€ 싀행될 수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.