μΉ μ ν리μΌμ΄μ μ 보μ, μ±λ₯, κ°μΈ μ 보 λ³΄νΈ κ°νλ₯Ό μν μΆμ² κΈ°λ° μΊμ 격리 λ° νλ‘ νΈμλ μλΉμ€ μ컀 μΊμ νν°μ λμ λν΄ μμ보μΈμ. ν¨κ³Όμ μΈ κ΅¬ν λ°©λ²μ λ°°μΈ μ μμ΅λλ€.
νλ‘ νΈμλ μλΉμ€ μ컀 μΊμ νν°μ λ: μΆμ² κΈ°λ° μΊμ 격리
λμμμ΄ μ§ννλ μΉ κ°λ° νκ²½μμ μ±λ₯κ³Ό 보μμ μ΅μ ννλ κ²μ κ°μ₯ μ€μν©λλ€. μ€νλΌμΈ κΈ°λ₯μ νμ±ννκ³ λ‘λ© μκ°μ κ°μ νλ κ°λ ₯ν λκ΅¬μΈ μλΉμ€ μ컀λ μ μ€νκ² λ€λ£¨μ§ μμΌλ©΄ μ μ¬μ μΈ λ³΄μ μ·¨μ½μ μ μΌκΈ°ν μλ μμ΅λλ€. μ΄λ¬ν μνμ μννκ³ μ¬μ©μ κ°μΈ μ 보λ₯Ό 보νΈνκΈ° μν ν΅μ¬ κΈ°μ μ€ νλκ° λ°λ‘ μΆμ² κΈ°λ° μΊμ 격리λ₯Ό ν΅ν νλ‘ νΈμλ μλΉμ€ μ컀 μΊμ νν°μ λμ λλ€. μ΄ μ’ ν© κ°μ΄λμμλ μ΄ νμ κΈ°μ μ κ°λ , μ΄μ , ꡬν λ° λͺ¨λ² μ¬λ‘μ λν΄ μμΈν μ΄ν΄λ³΄κ² μ΅λλ€.
μΊμ νν°μ λμ΄λ 무μμΈκ°?
μλΉμ€ μ컀μ λ§₯λ½μμ μΊμ νν°μ λμ 리μμ€μ μΆμ²λ₯Ό κΈ°λ°μΌλ‘ μΊμλ 리μμ€λ₯Ό 격리νλ κ΄νμ μλ―Έν©λλ€. νν°μ λμ΄ μμΌλ©΄ μλΉμ€ μ컀λ μ μ¬μ μΌλ‘ λ€λ₯Έ μΆμ²μ μΊμλ 리μμ€μ μ κ·Όν μ μμ΄ λ³΄μ μνκ³Ό μ μ¬μ μΈ λ°μ΄ν° μ μΆλ‘ μ΄μ΄μ§ μ μμ΅λλ€. μ΄λ νΉν μλνν° μ€ν¬λ¦½νΈλ 리μμ€κ° κ΄λ ¨λ μλ리μ€μμ μ€μν©λλ€.
jQueryλ Bootstrapκ³Ό κ°μ κ³΅ν΅ λΌμ΄λΈλ¬λ¦¬λ₯Ό μν΄ κ³΅μ μ½ν μΈ μ μ‘ λ€νΈμν¬(CDN)λ₯Ό μ¬μ©νλ μΉμ¬μ΄νΈλ₯Ό μμν΄ λ³΄μμμ€. μΊμ νν°μ λμ΄ μλ€λ©΄ ν μΉμ¬μ΄νΈμ μ£Όμ λ μ μ± μ€ν¬λ¦½νΈκ° λμΌν CDNμ μ¬μ©νλ λ€λ₯Έ μΉμ¬μ΄νΈμ μΊμλ 리μμ€μ μ κ·Όνκ³ μ‘°μνμ¬ κ΅μ°¨ μ¬μ΄νΈ μ€ν¬λ¦½ν (XSS) 곡격μ΄λ κΈ°ν 보μ μ·¨μ½μ μ μ λ°ν μ μμ΅λλ€.
μΆμ² κΈ°λ° μΊμ 격리λ 리μμ€κ° μΆμ²(μ€ν€λ§, νΈμ€νΈ μ΄λ¦, ν¬νΈ)λ₯Ό κΈ°λ°μΌλ‘ μ μ₯λκ³ κ²μλλ μΊμ νν°μ λμ νΉμ ννμ λλ€. μ΄λ₯Ό ν΅ν΄ μλΉμ€ μ컀λ μμ μ΄ μλΉμ€νλ μΉμ¬μ΄νΈμ λμΌν μΆμ²μ 리μμ€μλ§ μ κ·Όν μ μλλ‘ λ³΄μ₯ν©λλ€.
μΆμ² κΈ°λ° μΊμ κ²©λ¦¬κ° μ€μν μ΄μ λ 무μμΈκ°?
μΆμ² κΈ°λ° μΊμ 격리λ λ€μκ³Ό κ°μ λͺ κ°μ§ μ£Όμ μ΄μ μ μ 곡ν©λλ€:
- 보μ κ°ν: μΊμλ 리μμ€μ λν κ΅μ°¨ μΆμ² μ κ·Όμ λ°©μ§νμ¬ XSS 곡격 λ° κΈ°ν 보μ μ·¨μ½μ μ μνμ μνν©λλ€.
- κ°μΈ μ 보 λ³΄νΈ κ°μ : μΆμ²λ₯Ό κΈ°λ°μΌλ‘ μΊμλ λ°μ΄ν°λ₯Ό 격리νμ¬ μ¬λ¬ μΉμ¬μ΄νΈμ κ±Έμ³ μ¬μ©μλ₯Ό μΆμ ν κ°λ₯μ±μ μ νν©λλ€.
- μ±λ₯ ν₯μ: κ΄λ ¨ μλ 리μμ€λ‘ μΈν μΊμ μ€μΌ μνμ μ€μ¬ μ μ¬μ μΌλ‘ μΊμ μ μ€λ₯ μ ν₯μμν¬ μ μμ΅λλ€.
- 보μ νμ€ μ€μ: μΉ μ ν리μΌμ΄μ κ°λ°μ μν λͺ¨λ² μ¬λ‘ λ° λ³΄μ κΆμ₯ μ¬νκ³Ό μΌμΉν©λλ€.
μΊμ νν°μ λμ΄ μμ λμ 보μ μν μ΄ν΄νκΈ°
μΆμ² κΈ°λ° μΊμ 격리μ μ€μμ±μ μμ ν μ΄ν΄νλ €λ©΄ 곡μ μΊμμ κ΄λ ¨λ 보μ μνμ μ΄ν΄νλ κ²μ΄ νμμ μ λλ€:
κ΅μ°¨ μ¬μ΄νΈ μ€ν¬λ¦½ν (XSS) 곡격
μμ μΈκΈνλ―μ΄ ν μΉμ¬μ΄νΈμ μ£Όμ λ μ μ± μ€ν¬λ¦½νΈκ° λ€λ₯Έ μΉμ¬μ΄νΈμ μΊμλ 리μμ€μ μ κ·Όνμ¬ μ‘°μν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ 곡격μλ ν©λ²μ μΈ μΉμ¬μ΄νΈμ μ μ± μ½λλ₯Ό μ£Όμ νκ±°λ μ¬μ©μ μ격 μ¦λͺ μ νμΉκ±°λ κΈ°ν μ ν΄ν νλμ μνν μ μμ΅λλ€.
λ°μ΄ν° μ μΆ
μΊμ νν°μ λμ΄ μμΌλ©΄ ν μΉμ¬μ΄νΈμμ μΊμν λ―Όκ°ν λ°μ΄ν°μ λ€λ₯Έ μΉμ¬μ΄νΈκ° μ κ·Όν μ μμ΅λλ€. μ΄λ‘ μΈν΄ κ°μΈ μ 보, κΈμ΅ λ°μ΄ν° λλ κΈ°ν κΈ°λ° μ λ³΄κ° μ μΆλ μ μμ΅λλ€.
μΊμ ν¬μ΄μ¦λ
곡격μλ μ μ¬μ μΌλ‘ μ μ± λ¦¬μμ€λ₯Ό μΊμμ μ£Όμ ν μ μμΌλ©°, μ΄λ μμ¬νμ§ μλ μ¬μ©μμκ² μ 곡λ©λλ€. μ΄λ‘ μΈν΄ μ μ± μ½λκ° μ€νλκ±°λ μ€ν΄μ μμ§κ° μλ μ½ν μΈ κ° νμλ μ μμ΅λλ€.
μΆμ² κΈ°λ° μΊμ 격리 ꡬννκΈ°
μΆμ² κΈ°λ° μΊμ 격리λ₯Ό ꡬννλ κ²μ μΌλ°μ μΌλ‘ λ€μ λ¨κ³λ₯Ό ν¬ν¨ν©λλ€:
1. μΆμ²λ³λ‘ λ³λμ μΊμ μ΄λ¦ μ¬μ©νκΈ°
κ°μ₯ κ°λ¨ν μ κ·Ό λ°©μμ κ° μΆμ²μ λν΄ λ€λ₯Έ μΊμ μ΄λ¦μ μ¬μ©νλ κ²μ λλ€. μ΄λ κ² νλ©΄ λ€λ₯Έ μΆμ²μ 리μμ€κ° λ³λμ μΊμμ μ μ₯λμ΄ κ΅μ°¨ μΆμ² μ κ·Όμ λ°©μ§ν μ μμ΅λλ€.
λ€μμ μλΉμ€ μ컀μμ μ΄λ₯Ό ꡬννλ λ°©λ²μ μμ λλ€:
const CACHE_NAME = 'my-site-cache-' + self.location.hostname;
const urlsToCache = [
'/',
'/styles/main.css',
'/script/main.js'
];
self.addEventListener('install', function(event) {
// μ€μΉ λ¨κ³ μν
event.waitUntil(
caches.open(CACHE_NAME)
.then(function(cache) {
console.log('μΊμ μ΄λ¦Ό');
return cache.addAll(urlsToCache);
})
);
});
self.addEventListener('fetch', function(event) {
event.respondWith(
caches.match(event.request)
.then(function(response) {
// μΊμ ννΈ - μλ΅ λ°ν
if (response) {
return response;
}
// μ€μ: μμ²μ 볡μ ν©λλ€.
// μμ²μ μ€νΈλ¦Όμ΄λ©° ν λ²λ§ μ¬μ©ν μ μμ΅λλ€. μΊμμ μν΄ ν λ²,
// λΈλΌμ°μ μ fetchμ μν΄ ν λ² μ¬μ©λλ―λ‘ μλ΅μ 볡μ ν΄μΌ ν©λλ€.
var fetchRequest = event.request.clone();
return fetch(fetchRequest).then(
function(response) {
// μ ν¨ν μλ΅μ λ°μλμ§ νμΈν©λλ€
if(!response || response.status !== 200 || response.type !== 'basic') {
return response;
}
// μ€μ: μλ΅μ 볡μ ν©λλ€.
// μλ΅μ μ€νΈλ¦Όμ΄λ©° ν λ²λ§ μ¬μ©ν΄μΌ ν©λλ€.
var responseToCache = response.clone();
caches.open(CACHE_NAME)
.then(function(cache) {
cache.put(event.request, responseToCache);
});
return response;
}
);
})
);
});
μ΄ μμμ CACHE_NAMEμ μΉμ¬μ΄νΈμ νΈμ€νΈ μ΄λ¦μ κΈ°λ°μΌλ‘ λμ μΌλ‘ μμ±λ©λλ€. μ΄λ κ² νλ©΄ κ° μΉμ¬μ΄νΈκ° μ체 μ μ© μΊμλ₯Ό κ°κ² λ©λλ€.
2. μΊμ API κΈ°λ₯ μ¬μ©νκΈ° (μ: Vary ν€λ)
μΊμ APIλ μμ² ν€λλ₯Ό κΈ°λ°μΌλ‘ μΊμλ 리μμ€λ₯Ό ꡬλ³νλ λ° μ¬μ©ν μ μλ Vary ν€λμ κ°μ κΈ°λ₯μ μ 곡ν©λλ€. μΆμ²μ μ§μ κ΄λ ¨μ΄ μμ§λ μμ§λ§, Vary ν€λλ μΊμ± ν¨μ¨μ±μ κ°μ νκ³ μ°λ°μ μΈ κ΅μ°¨ μΆμ² 리μμ€ κ³΅μ λ₯Ό λ°©μ§νλ λ° μ¬μ©λ μ μμ΅λλ€.
Vary ν€λλ μλ²κ° νΉμ μμ² ν€λ κ°μ λ°λΌ λ€λ₯Έ μλ΅μ λ°νν μ μμμ λΈλΌμ°μ μ μ립λλ€. μλ₯Ό λ€μ΄, μΉμ¬μ΄νΈκ° Accept-Language ν€λλ₯Ό κΈ°λ°μΌλ‘ λ€λ₯Έ μ½ν
μΈ λ₯Ό μ 곡νλ κ²½μ° μλ΅μ Vary: Accept-Language ν€λλ₯Ό ν¬ν¨ν΄μΌ ν©λλ€.
3. νμ 리μμ€ λ¬΄κ²°μ±(SRI) ꡬννκΈ°
νμ 리μμ€ λ¬΄κ²°μ±(SRI)μ λΈλΌμ°μ κ° CDNμ΄λ λ€λ₯Έ μλνν° μμ€μμ κ°μ Έμ¨ νμΌμ΄ λ³μ‘°λμ§ μμλμ§ νμΈν μ μλ 보μ κΈ°λ₯μ
λλ€. <script> λλ <link> νκ·Έμ λ¬΄κ²°μ± μμ±μ ν¬ν¨ν¨μΌλ‘μ¨ λΈλΌμ°μ κ° μμ ν΄μ κ°κ³Ό μΌμΉνλ κ²½μ°μλ§ λ¦¬μμ€λ₯Ό μ€ννκ±°λ μ μ©νλλ‘ ν μ μμ΅λλ€.
<script
src="https://example.com/script.js"
integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwE8wc"
crossorigin="anonymous"></script>
SRIκ° μ§μ μΊμ νν°μ λμ ꡬννμ§λ μμ§λ§, μΊμλ 리μμ€κ° μμλμ§ μμμμ 보μ₯ν¨μΌλ‘μ¨ μΆκ°μ μΈ λ³΄μ κ³μΈ΅μ μ 곡ν©λλ€.
4. μ½ν μΈ λ³΄μ μ μ± (CSP)
μ½ν μΈ λ³΄μ μ μ± (CSP)μ νΉμ μΉμ¬μ΄νΈμ λν΄ λΈλΌμ°μ κ° λ‘λν μ μλ 리μμ€λ₯Ό μ μ΄ν μ μλ κ°λ ₯ν 보μ λ©μ»€λμ¦μ λλ€. CSPλ₯Ό μ μν¨μΌλ‘μ¨ μ λ’°ν μ μλ μμ€λ‘λΆν° 리μμ€κ° λ‘λλλ κ²μ λ°©μ§νμ¬ XSS 곡격 λ° κΈ°ν 보μ μ·¨μ½μ μ μνμ μνν μ μμ΅λλ€.
CSPλ μΌλ°μ μΌλ‘ Content-Security-Policy HTTP ν€λ λλ <meta> νκ·Έλ₯Ό μ¬μ©νμ¬ μ μλ©λλ€. μ€ν¬λ¦½νΈ, μ€νμΌμνΈ, μ΄λ―Έμ§, κΈκΌ΄ λ± λ€μν μ νμ 리μμ€μ λν΄ νμ©λλ μμ€λ₯Ό μ§μ νλ μΌλ ¨μ μ§μμ΄λ‘ ꡬμ±λ©λλ€.
μλ₯Ό λ€μ΄, λ€μ CSP μ§μμ΄λ μ€ν¬λ¦½νΈ λ‘λλ₯Ό λμΌν μΆμ²λ‘ μ νν©λλ€:
Content-Security-Policy: script-src 'self'
SRIμ λ§μ°¬κ°μ§λ‘ CSPλ μ§μ μ μΌλ‘ μΊμ νν°μ λμ ꡬννμ§λ μμ§λ§, 곡μ μΊμμ μν΄ μ νλ μ μλ κ΅μ°¨ μ¬μ΄νΈ μ€ν¬λ¦½ν 곡격μ λν μ€μν λ°©μ΄ κ³μΈ΅μ μ 곡ν©λλ€.
μΊμ νν°μ λ ꡬνμ μν λͺ¨λ² μ¬λ‘
μΊμ νν°μ λμ ν¨κ³Όμ μΌλ‘ ꡬννλ €λ©΄ λ€μ λͺ¨λ² μ¬λ‘λ₯Ό κ³ λ €νμμμ€:
- μΌκ΄λ μΊμ λͺ λͺ κ·μΉ μ¬μ©: 리μμ€κ° μ μ νκ² κ²©λ¦¬λλλ‘ μΊμμ λν λͺ ννκ³ μΌκ΄λ λͺ λͺ κ·μΉμ μ€μ νμμμ€.
- μ κΈ°μ μΌλ‘ μΊμ μ λ°μ΄νΈ: μ¬μ©μκ° νμ μ΅μ λ²μ μ μΉμ¬μ΄νΈλ₯Ό μ 곡λ°λλ‘ μΊμλ₯Ό μ κΈ°μ μΌλ‘ μ λ°μ΄νΈνλ μ λ΅μ ꡬννμμμ€.
- μΊμ μ λ°μ΄νΈλ₯Ό μννκ² μ²λ¦¬: μ¬μ©μ κ²½νμ λ°©ν΄νμ§ μλλ‘ μΊμ μ λ°μ΄νΈλ₯Ό μννκ² μ²λ¦¬νλ λ©μ»€λμ¦μ ꡬννμμμ€. μ¬κΈ°μλ λ²μ κ΄λ¦¬ 체κ³λ λ°±κ·ΈλΌμ΄λ μ λ°μ΄νΈ νλ‘μΈμ€λ₯Ό μ¬μ©νλ κ²μ΄ ν¬ν¨λ μ μμ΅λλ€.
- μΊμ νν°μ λ ꡬν ν μ€νΈ: μΊμ νν°μ λ ꡬνμ΄ μμλλ‘ μλνκ³ μλ‘μ΄ λ³΄μ μ·¨μ½μ μ μ λ°νμ§ μλμ§ μ² μ ν ν μ€νΈνμμμ€.
- μΊμ λͺ¨λν°λ§: μΊμκ° μ΅μ μΌλ‘ μλνκ³ λ¬Έμ κ° μλμ§ λͺ¨λν°λ§νμμμ€.
- CDN μΊμ± κ³ λ €: CDNμ μ¬μ©νλ κ²½μ° μΆμ² κΈ°λ° μΊμ±μ μ‘΄μ€νλλ‘ μ¬λ°λ₯΄κ² ꡬμ±λμλμ§ νμΈνμμμ€. λ§μ CDNμ μΆμ²λ₯Ό κΈ°λ°μΌλ‘ μΊμλ 리μμ€λ₯Ό 격리νλ κΈ°λ₯μ μ 곡ν©λλ€.
μ€μ μ ν리μΌμ΄μ μμμ μΊμ νν°μ λ μμ
μΊμ νν°μ λμ 보μ, κ°μΈ μ 보 λ³΄νΈ λ° μ±λ₯μ ν₯μμν€κΈ° μν΄ λ€μν μ€μ μ ν리μΌμ΄μ μμ λ리 μ¬μ©λ©λλ€. λ€μμ λͺ κ°μ§ μμ λλ€:
- μ μμκ±°λ μΉμ¬μ΄νΈ: μ μμκ±°λ μΉμ¬μ΄νΈλ μ μ©μΉ΄λ μ 보 λ° κ΅¬λ§€ λ΄μκ³Ό κ°μ λ―Όκ°ν μ¬μ©μ λ°μ΄ν°λ₯Ό 보νΈνκΈ° μν΄ μΊμ νν°μ λμ μ¬μ©ν©λλ€. μΆμ²λ₯Ό κΈ°λ°μΌλ‘ μΊμλ λ°μ΄ν°λ₯Ό 격리ν¨μΌλ‘μ¨ μ΄ μ 보μ λν λ¬΄λ¨ μ κ·Όμ λ°©μ§ν μ μμ΅λλ€.
- μμ λ―Έλμ΄ νλ«νΌ: μμ λ―Έλμ΄ νλ«νΌμ κ΅μ°¨ μ¬μ΄νΈ μ€ν¬λ¦½ν 곡격μ λ°©μ§νκ³ μ¬μ©μ κ°μΈ μ 보λ₯Ό 보νΈνκΈ° μν΄ μΊμ νν°μ λμ μ¬μ©ν©λλ€. μΆμ²λ₯Ό κΈ°λ°μΌλ‘ μΊμλ λ°μ΄ν°λ₯Ό 격리ν¨μΌλ‘μ¨ μ μ± μ€ν¬λ¦½νΈκ° μ¬μ©μ κ³μ μ μ κ·Όνκ±°λ κ°μΈ μ 보λ₯Ό νμΉλ κ²μ λ°©μ§ν μ μμ΅λλ€.
- μ¨λΌμΈ λ± νΉ μ ν리μΌμ΄μ : μ¨λΌμΈ λ± νΉ μ ν리μΌμ΄μ μ λ―Όκ°ν κΈμ΅ λ°μ΄ν°λ₯Ό 보νΈνκΈ° μν΄ μΊμ νν°μ λμ μ¬μ©ν©λλ€. μΆμ²λ₯Ό κΈ°λ°μΌλ‘ μΊμλ λ°μ΄ν°λ₯Ό 격리ν¨μΌλ‘μ¨ κ³μ’ μμ‘, κ±°λ λ΄μ λ° κΈ°ν κΈ°λ° μ 보μ λν λ¬΄λ¨ μ κ·Όμ λ°©μ§ν μ μμ΅λλ€.
- μ½ν μΈ κ΄λ¦¬ μμ€ν (CMS): CMS νλ«νΌμ μ½ν μΈ λ₯Ό 격리νκ³ κ΅μ°¨ μ¬μ΄νΈ μ€ν¬λ¦½ν 곡격μ λ°©μ§νκΈ° μν΄ μΊμ νν°μ λμ μ¬μ©ν©λλ€. νλ«νΌμμ νΈμ€ν λλ κ° μΉμ¬μ΄νΈλ μΌλ°μ μΌλ‘ μ체 μ μ© μΊμλ₯Ό κ°μ§λλ€.
μΊμ νν°μ λ ꡬνμ μν λꡬ λ° λ¦¬μμ€
λͺ κ°μ§ λꡬμ 리μμ€κ° μΊμ νν°μ λμ ν¨κ³Όμ μΌλ‘ ꡬννλ λ° λμμ΄ λ μ μμ΅λλ€:
- Workbox: Workboxλ μ λ’°ν μ μκ³ κ³ μ±λ₯μΈ μΉ μ ν리μΌμ΄μ μ λ μ½κ² ꡬμΆν μ μλλ‘ νλ μλ°μ€ν¬λ¦½νΈ λΌμ΄λΈλ¬λ¦¬ λ° λꡬ λͺ¨μμ λλ€. μΊμ±, λΌμ°ν λ° κΈ°ν μλΉμ€ μ컀 κ΄λ ¨ μμ μ μν λͺ¨λμ μ 곡ν©λλ€.
- Lighthouse: Lighthouseλ μΉ νμ΄μ§μ νμ§μ ν₯μμν€κΈ° μν μ€ν μμ€ μλν λꡬμ λλ€. μ±λ₯, μ κ·Όμ±, νλ‘κ·Έλ μλΈ μΉ μ±, SEO λ±μ λν κ°μ¬λ₯Ό μ 곡ν©λλ€. μΊμ± ν¨μ¨μ±μ κ°μ¬νλ λ° μ¬μ©νμμμ€.
- λΈλΌμ°μ κ°λ°μ λꡬ: λΈλΌμ°μ κ°λ°μ λꡬλ μΊμ μ μ€λ₯ , μΊμ ν¬κΈ°, μΊμ λ§λ£ μκ° λ± μΊμ± λμμ λν νλΆν μ 보λ₯Ό μ 곡ν©λλ€. μ΄ λꡬλ₯Ό μ¬μ©νμ¬ μΊμλ₯Ό λͺ¨λν°λ§νκ³ μ μ¬μ μΈ λ¬Έμ λ₯Ό μλ³νμμμ€.
- μΉ λ³΄μ 체ν¬λ¦¬μ€νΈ: μΉ λ³΄μ 체ν¬λ¦¬μ€νΈ λ° λͺ¨λ² μ¬λ‘λ₯Ό μ°Έμ‘°νμ¬ μΊμ νν°μ λμ μ¬λ°λ₯΄κ² ꡬννκ³ λ€λ₯Έ μ μ¬μ μΈ λ³΄μ μ·¨μ½μ μ ν΄κ²°νκ³ μλμ§ νμΈνμμμ€. OWASP(Open Web Application Security Project)λ νλ₯ν 리μμ€μ λλ€.
μΊμ νν°μ λμ λ―Έλ
μΊμ νν°μ λμ λ―Έλλ μΊμλ 리μμ€λ₯Ό 격리νκ³ λ³΄μμ κ°ννκΈ° μν λμ± μ κ΅ν κΈ°μ μ ν¬ν¨ν κ°λ₯μ±μ΄ λμ΅λλ€. λͺ κ°μ§ μ μ¬μ μΈ λ―Έλ λ°μ μ¬νμ λ€μκ³Ό κ°μ΅λλ€:
- λ μΈλΆνλ μΊμ νν°μ λ: λ¨μν μΆμ²λ₯Ό κΈ°λ°μΌλ‘ νν°μ λνλ λμ , λ―Έλμ ꡬνμ μ¬μ©μ μ μμ΄λ μ½ν μΈ μ νκ³Ό κ°μ λ€λ₯Έ μμλ₯Ό κΈ°λ°μΌλ‘ νν°μ λν μ μμ΅λλ€.
- μλνλ μΊμ νν°μ λ: λ―Έλμ λΈλΌμ°μ μ μλΉμ€ μ컀 λΌμ΄λΈλ¬λ¦¬λ μλμΌλ‘ μΊμ νν°μ λμ ꡬννμ¬ κ°λ°μκ° μλμΌλ‘ ꡬμ±νλ λΆλ΄μ λμ΄μ€ μ μμ΅λλ€.
- μ½ν μΈ μ μ‘ λ€νΈμν¬(CDN)μμ ν΅ν©: λ―Έλμ CDNμ μΊμλ 리μμ€λ₯Ό κ΄λ¦¬νκ³ κ²©λ¦¬νκΈ° μν λ κ³ κΈ κΈ°λ₯μ μ 곡νμ¬ λκ·λͺ¨λ‘ μΊμ νν°μ λμ λ μ½κ² ꡬνν μ μλλ‘ ν μ μμ΅λλ€.
- κ°μ λ 보μ κ°μ¬ λꡬ: λ―Έλμ 보μ κ°μ¬ λꡬλ μΊμ νν°μ λ ꡬνμ λν λ ν¬κ΄μ μΈ λΆμμ μ 곡νμ¬ κ°λ°μκ° μ μ¬μ μΈ λ³΄μ μ·¨μ½μ μ μλ³νκ³ ν΄κ²°νλ λ° λμμ μ€ μ μμ΅λλ€.
κ²°λ‘
μΆμ² κΈ°λ° μΊμ 격리λ₯Ό ν΅ν νλ‘ νΈμλ μλΉμ€ μ컀 μΊμ νν°μ λμ μΉ μ ν리μΌμ΄μ μ 보μ, κ°μΈ μ 보 λ³΄νΈ λ° μ±λ₯μ ν₯μμν€κΈ° μν μ€μν κΈ°μ μ λλ€. μΆμ²λ₯Ό κΈ°λ°μΌλ‘ μΊμλ 리μμ€λ₯Ό 격리ν¨μΌλ‘μ¨ κ΅μ°¨ μ¬μ΄νΈ μ€ν¬λ¦½ν 곡격, λ°μ΄ν° μ μΆ λ° κΈ°ν 보μ μ·¨μ½μ μ μνμ μνν μ μμ΅λλ€. μ΄ κ°μ΄λμ μ€λͺ λ λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄κ³ μ¬μ© κ°λ₯ν λꡬμ 리μμ€λ₯Ό νμ©ν¨μΌλ‘μ¨ μΊμ νν°μ λμ ν¨κ³Όμ μΌλ‘ ꡬννκ³ μΉ μ ν리μΌμ΄μ μ΄ μμ νκ³ μ±λ₯μ΄ μ°μνλλ‘ λ³΄μ₯ν μ μμ΅λλ€.
μΉμ΄ κ³μ λ°μ νκ³ μλ‘μ΄ λ³΄μ μνμ΄ λ±μ₯ν¨μ λ°λΌ μ΅μ 보μ λͺ¨λ² μ¬λ‘μ λν μ΅μ μ 보λ₯Ό μ μ§νκ³ μ¬μ©μμ λ°μ΄ν°λ₯Ό 보νΈνκΈ° μν κ°λ ₯ν 보μ μ‘°μΉλ₯Ό ꡬννλ κ²μ΄ μ€μν©λλ€. μΊμ νν°μ λμ μ΄λ¬ν λ Έλ ₯μ μ€μν λΆλΆμ λλ€.
μΉ κ°λ° νλ‘μ νΈμμ νμ 보μκ³Ό κ°μΈ μ 보 보νΈλ₯Ό μ°μ μν΄μΌ ν¨μ κΈ°μ΅νμμμ€. κ·Έλ κ² ν¨μΌλ‘μ¨ λͺ¨λ μ¬λμ μν λ μμ νκ³ μ λ’°ν μ μλ μΉμ λ§λλ λ° λμμ΄ λ μ μμ΅λλ€.