Β
ν΄λΌμ΄μΈνΈ μ¬μ΄λ μ
λ ₯ κ²μ¦μ λν΄ μμ보기 μ μ, ν΄λΌμ΄μΈνΈμ μλ² κ°μ λ°μ΄ν° μ²λ¦¬ μ μ°¨λ₯Ό λ¨Όμ μ΄ν΄λ³΄μ.
(κ·Έλ¦Ό μ½μ
μμ )
μ κ·Έλ¦Όκ³Ό κ°μ΄ μλ²μ λ°μ΄ν°λ₯Ό μ μ‘νλ©΄ μλ²μμλ μ€λ₯λ₯Ό μ²λ¦¬νμ§λ§, μλ²μμλ§ μ
λ ₯μ κ²μ¦ν κ²½μ° ν΄λΌμ΄μΈνΈμμ μ
λ ₯ κ²μ¦μ μ²λ¦¬ν λλ³΄λ€ μλλ λλ¦¬κ³ λΆνμν μμ²μ κ³μ μ²λ¦¬νκ² λλ€λ νκ³κ° μλ€. μ΄λ¬ν νκ³λ₯Ό 보μνκΈ° μν΄ ν΄λΌμ΄μΈνΈ μΈ‘μμμ μ
λ ₯ κ²μ¦μ νμμ μ΄λ€.
λν 보μμ μΈ κ΄μ μμλ ν΄λΌμ΄μΈνΈ μ¬μ΄λ μ
λ ₯ κ²μ¦μ μ¬μ©μκ° μ
λ ₯ν λ°μ΄ν°λ₯Ό μλ²λ‘ μ μ‘νκΈ° μ μ 미리 νν°λ§νκ³ μ νν¨μΌλ‘μ¨ λ€μν 보μ μνμ μ€μ΄κΈ° μν μ‘°μΉμ΄λ€. ν΄λΌμ΄μΈνΈ κ²μ¦μ 보μμ 첫 λ²μ§Έ λ°©μ΄μ μν μ νλ©°, κΈ°λ³Έμ μΈ κ³΅κ²©μ μ°¨λ¨νκ±°λ 곡격 μλλ₯Ό μ΄λ ΅κ² λ§λ€ μ μλ€. κ·Έλ¬λ ν΄λΌμ΄μΈνΈ μ¬μ΄λ κ²μ¦λ§μ 100% μ λ’°ν μλ μμΌλ―λ‘ μλ² μ¬μ΄λ κ²μ¦κ³Ό λ³νν΄μΌ νλ€λ μ μ μ μνμ.
(1) μ€μμ±
μΉ μ ν리μΌμ΄μ
μμ μ¬μ©μκ° μ
λ ₯νλ λ°μ΄ν°λ μ λ’°ν μ μλ μΆμ²λ‘ κ°μ£Όν΄μΌ νλ€. μ¬μ©μκ° μλμ μΌλ‘ μ
μ± μ½λλ₯Ό ν¬ν¨ν λ°μ΄ν°λ₯Ό μ
λ ₯ν μ μκΈ° λλ¬Έμ μ ν리μΌμ΄μ
μ λͺ¨λ μ
λ ₯ κ°μ λν΄ μ λ’°ν μ μλμ§μ λν κ²μ¦μ μνν΄μΌ νλ€.
μ
λ ₯ κ²μ¦μ λͺ©μ μ μ ν리μΌμ΄μ
μ΄ μμνμ§ λͺ»ν μ
λ ₯μ μ²λ¦¬νλ κ³Όμ μμ λ°μν μ μλ λ€μν 보μ μνμ λ°©μ§νλ κ²μ΄λ€. μ
λ ₯ κ²μ¦μ 보μμ μΈ λͺ©μ μΈμλ λ°μ΄ν° 무결μ±μ 보μ₯νκ³ , μλͺ»λ λ°μ΄ν°λ‘ μΈν΄ λ°μν μ μλ μ ν리μΌμ΄μ
μ€λ₯λ₯Ό μ€μ΄λ μν μ νλ€.
Β
νλ‘ νΈμλμμ μ
λ ₯ κ²μ¦μ μννλ μ΄μ λ λ€μκ³Ό κ°λ€.
νλ‘ νΈμλμμ μ
λ ₯ κ²μ¦μ μν
- λΉ λ₯Έ νΌλλ°± μ 곡: μ¬μ©μκ° λ°μ΄ν°λ₯Ό μ λ ₯ν λ μ€μκ°μΌλ‘ μ€λ₯λ₯Ό μλ €μ£Όμ΄ λΉ λ₯΄κ² μμ ν μ μλλ‘ λμμ€λ€.
- μλ² λ¦¬μμ€ μ μ½: μλͺ»λ λ°μ΄ν°κ° μλ²λ‘ μ μ‘λμ§ μλλ‘ λ§μ λΆνμν μλ² μμ²μ μ€μ΄κ³ , μλ²μ λΆνλ₯Ό μ€μΈλ€.
- 보μ 곡격 λ°©μ§: ν΄λΌμ΄μΈνΈ μΈ‘μμ κΈ°λ³Έμ μΈ μ λ ₯ κ²μ¦μ ν΅ν΄ XSS, SQL μΈμ μ λ±μ 곡격 μλλ₯Ό μΌμ°¨μ μΌλ‘ μ°¨λ¨ν μ μλ€.
λ€λ§, ν΄λΌμ΄μΈνΈ μΈ‘ κ²μ¦μ 보쑰μ μΈ λ³΄μ μ‘°μΉμ λΆκ³Όνλ€λ μ μ λͺ
μ¬ν΄μΌ νλ€. 곡격μλ ν΄λΌμ΄μΈνΈ μΈ‘μμ μ€νλλ μλ°μ€ν¬λ¦½νΈλ₯Ό λΉνμ±ννκ±°λ, ν΄λΌμ΄μΈνΈ κ²μ¦μ μ°νν μ μλ λ€μν λ°©λ²μ μ¬μ©ν μ μκΈ° λλ¬Έμ λ°λμ μλ² μΈ‘μμ μΆκ°μ μΈ κ²μ¦μ μνν΄μΌ νλ€.
Β
(2) μ λ ₯ κ²μ¦μ΄ νμν μ£Όμ 보μ μν
1) XSS(Cross-Site Scripting) λ°©μ§
XSS 곡격μ 곡격μκ° μ
μμ μΈ μ€ν¬λ¦½νΈλ₯Ό λ€λ₯Έ μ¬μ©μμ λΈλΌμ°μ μμ μ€ννλλ‘ νλ 곡격μ΄λ€. ν΄λΌμ΄μΈνΈ μΈ‘μμ μ΄λ¬ν 곡격μ λ°©μ§νλ €λ©΄ μ
λ ₯ λ°μ΄ν°μ HTML νκ·Έλ μλ°μ€ν¬λ¦½νΈ μ½λκ° ν¬ν¨λμ§ μλλ‘ νν°λ§ν΄μΌ νλ€.
μμ
μλ°μ€ν¬λ¦½νΈλ‘ XSS νν°λ§
function sanitizeInput(input) { const element = document.createElement('div'); element.innerText = input; // HTML μμλ‘ λ³ννμ¬ μ€ν¬λ¦½νΈ νκ·Έλ₯Ό μ€ν return element.innerHTML; } document.querySelector('form').addEventListener('submit', function(event) { const userInput = document.getElementById('comment').value; const sanitizedInput = sanitizeInput(userInput); document.getElementById('comment').value = sanitizedInput; // κ²μ¦λ κ°λ§ μλ²λ‘ μ μ‘ });
μ΄ μ½λμμ, μ
λ ₯λ λ°μ΄ν°μ HTMLμ΄λ μλ°μ€ν¬λ¦½νΈ νκ·Έκ° ν¬ν¨λμ΄ μλ κ²½μ° μ΄λ₯Ό ν
μ€νΈλ‘ λ³ννμ¬ μ€νλμ§ μλλ‘ μ²λ¦¬νλ€.
2) SQL μΈμ μ λ°©μ§
SQL μΈμ μ
μ 곡격μκ° SQL 쿼리μ μ
μμ μΈ μ½λλ₯Ό μ½μ
νλ λ°©λ²μΌλ‘, ν΄λΌμ΄μΈνΈ μΈ‘μμ κ²μ¦μ ν΅ν΄ 쿼리μ νΉμ λ¬Έμκ° ν¬ν¨λμ§ μλλ‘ ν μ μλ€. νμ§λ§ SQL μΈμ μ
μ μλ² μΈ‘μμ λ°λμ λ§μμΌ νλ©° ν΄λΌμ΄μΈνΈ μΈ‘μμλ§ λ§μ μλ μλ€.
μμ
function validateInput(input) { const pattern = /^[a-zA-Z0-9]+$/; // μλ¬Έκ³Ό μ«μλ§ νμ© return pattern.test(input); } document.querySelector('form').addEventListener('submit', function(event) { const userInput = document.getElementById('username').value; if (!validateInput(userInput)) { event.preventDefault(); // μ ν¨νμ§ μμ λ°μ΄ν°κ° μλ²λ‘ μ μ‘λλ κ²μ μ°¨λ¨ alert("Invalid input!"); } });
μ μμμμλ μνλ²³κ³Ό μ«μλ§ νμ©νλ μ κ·μμ μ μ©νμ¬, νΉμ λ¬Έμκ° μ
λ ₯λμ§ μλλ‘ κ²μ¦νκ³ μλ€.
Β
Β
Β