μ μΈκ³ κ°λ°μλ₯Ό μν΄ λ³΄μκ³Ό μ΅μ μ κΈ°λ₯μ 보μ₯νλ λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨ λ§€λνμ€νΈ νμΌ λ° μλ°μ€ν¬λ¦½νΈ API κΆν κ΄λ¦¬μ λν ν¬κ΄μ μΈ κ°μ΄λμ λλ€.
λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨ λ§€λνμ€νΈ: μλ°μ€ν¬λ¦½νΈ API κΆν κ΄λ¦¬ λ§μ€ν°νκΈ°
λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨μ μΉ λΈλΌμ°μ μ κΈ°λ₯μ μΆκ°νμ¬ μ¬μ©μ κ²½νμ ν₯μμν΅λλ€. κ·Έλ¬λ λ―Όκ°ν μ¬μ©μ λ°μ΄ν°μ λΈλΌμ°μ κΈ°λ₯μ μ κ·Όν μ μκΈ° λλ¬Έμ μ격ν 보μ μ‘°μΉκ° νμν©λλ€. λ§€λνμ€νΈ νμΌμ νμ₯ νλ‘κ·Έλ¨μ μ²μ¬μ§ μν μ νλ©°, λ©νλ°μ΄ν°, κΆν λ° λμμ μ μν©λλ€. μ΄ ν¬κ΄μ μΈ κ°μ΄λμμλ λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨ λ§€λνμ€νΈ νμΌμ 볡μ‘μ±μ νꡬνκ³ , μλ°μ€ν¬λ¦½νΈ API κΆν κ΄λ¦¬μ μ€μ μ λλ©°, μ μΈκ³ κ°λ°μλ₯Ό μν λͺ¨λ² μ¬λ‘λ₯Ό μ 곡ν©λλ€.
λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨ λ§€λνμ€νΈλ 무μμΈκ°?
μΌλ°μ μΌλ‘ manifest.jsonμ΄λΌλ μ΄λ¦μ λ§€λνμ€νΈ νμΌμ νμ₯ νλ‘κ·Έλ¨μ λν νμ μ 보λ₯Ό λΈλΌμ°μ μ μ 곡νλ JSON νμμ νμΌμ
λλ€. μ¬κΈ°μλ λ€μμ΄ ν¬ν¨λ©λλ€:
- λ©νλ°μ΄ν°: μ΄λ¦, μ€λͺ , λ²μ , μμ±μ, μμ΄μ½ λ° κΈ°ν μ€λͺ μ 보.
- κΆν: νμ₯ νλ‘κ·Έλ¨μ΄ μ κ·Όν΄μΌ νλ μλ°μ€ν¬λ¦½νΈ API λ° λ¦¬μμ€ μ μΈ.
- μ½ν μΈ μ€ν¬λ¦½νΈ: νΉμ μΉ νμ΄μ§μ μ£Όμ λ μλ°μ€ν¬λ¦½νΈ λ° CSS νμΌ μ μ.
- λ°±κ·ΈλΌμ΄λ μ€ν¬λ¦½νΈ: λ°±κ·ΈλΌμ΄λμμ μ€νλλ©° μ΄λ²€νΈλ₯Ό μ²λ¦¬νκ³ νμ₯ νλ‘κ·Έλ¨μ λ‘μ§μ κ΄λ¦¬νλ μꡬμ μΈ μ€ν¬λ¦½νΈ.
- λΈλΌμ°μ μ‘μ /νμ΄μ§ μ‘μ : ν΄λ° μμ΄μ½μ΄λ 컨ν μ€νΈ λ©λ΄ νλͺ©κ³Ό κ°μ νμ₯ νλ‘κ·Έλ¨μ μ¬μ©μ μΈν°νμ΄μ€ μμ μ¬μ.
μ ꡬ쑰νλ λ§€λνμ€νΈ νμΌμ νμ₯ νλ‘κ·Έλ¨μ μ€μΉ, κΈ°λ₯ λ° λ³΄μμ λ§€μ° μ€μν©λλ€. λΈλΌμ°μ λ λ§€λνμ€νΈλ₯Ό μ¬μ©νμ¬ νμ₯ νλ‘κ·Έλ¨μ μꡬ μ¬νμ μ΄ν΄νκ³ μμ²λ 리μμ€μ λν μ κ·Όμ νμ©νκ±°λ κ±°λΆν©λλ€.
μλ°μ€ν¬λ¦½νΈ API κΆν μ΄ν΄νκΈ°
λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨μ μλ°μ€ν¬λ¦½νΈ APIλ₯Ό ν΅ν΄ λΈλΌμ°μ λ° μΉ νμ΄μ§μ μνΈ μμ©ν©λλ€. μ΄λ¬ν APIμ λν μ κ·Όμ κΆν μμ€ν μ ν΅ν΄ μ μ΄λ©λλ€. λ§€λνμ€νΈ νμΌμ νμ₯ νλ‘κ·Έλ¨μ΄ μ κ·Όν΄μΌ νλ APIλ₯Ό μ μΈν©λλ€. μ¬μ©μκ° νμ₯ νλ‘κ·Έλ¨μ μ€μΉν λ λΈλΌμ°μ λ μμ²λ κΆν λͺ©λ‘μ νμνμ¬ μ¬μ©μκ° νμ₯ νλ‘κ·Έλ¨μ μ λ’°ν μ§ μ¬λΆμ λν΄ μ 보μ μ κ°ν κ²°μ μ λ΄λ¦΄ μ μλλ‘ ν©λλ€.
μΌλ°μ μΈ κΆνκ³Ό κ·Έ μλ―Έ
λ€μμ λͺ κ°μ§ μΌλ°μ μΈ μλ°μ€ν¬λ¦½νΈ API κΆνκ³Ό κ·Έ μ μ¬μ μλ―Έμ λν κ°μμ λλ€:
activeTab: νμ₯ νλ‘κ·Έλ¨μ νμ¬ νμ± νμ λν μμ μ κ·Ό κΆνμ λΆμ¬ν©λλ€. μ΄λ₯Ό ν΅ν΄ νμ₯ νλ‘κ·Έλ¨μ λͺ¨λ μΉμ¬μ΄νΈμ λν μꡬμ μΈ μ κ·Όμ μꡬνμ§ μκ³ λ νμ± νμμ μ€ν¬λ¦½νΈλ₯Ό μ€ννκ³ μ½ν μΈ μ μ κ·Όν μ μμ΅λλ€.tabs: λΈλΌμ°μ νκ³Ό μ°½μ λν μ κ·Όμ μ 곡ν©λλ€. μ΄ κΆνμ ν΅ν΄ νμ₯ νλ‘κ·Έλ¨μ νμ μμ±, μμ , λ«κ³ ν νλμ λͺ¨λν°λ§ν μ μμ΅λλ€. μ: ν κ΄λ¦¬ νμ₯ νλ‘κ·Έλ¨μ μ΄ κΆνμ μ¬μ©νμ¬ μ΄λ¦° νμ κ·Έλ£ΉμΌλ‘ ꡬμ±ν μ μμ΅λλ€.storage: νμ₯ νλ‘κ·Έλ¨μ΄ λΈλΌμ°μ μ μ μ₯μ APIλ₯Ό μ¬μ©νμ¬ λ‘컬μ λ°μ΄ν°λ₯Ό μ μ₯νκ³ κ²μν μ μλλ‘ νμ©ν©λλ€. μ΄ λ°μ΄ν°λ λΈλΌμ°μ λ₯Ό λ«μλ€κ° λ€μ μ΄μ΄λ μ μ§λ©λλ€. μ: μ¬μ©μ κΈ°λ³Έ μ€μ μ΄λ μ μ₯λ λ°μ΄ν°λ₯Ό κΈ°μ΅νλ νμ₯ νλ‘κ·Έλ¨μ μ μ₯μ APIλ₯Ό μ¬μ©ν©λλ€.cookies: νμ₯ νλ‘κ·Έλ¨μ μΉμ¬μ΄νΈμ κ΄λ ¨λ μΏ ν€μ λν μ κ·Ό κΆνμ λΆμ¬ν©λλ€. μ΄ κΆνμ ν΅ν΄ νμ₯ νλ‘κ·Έλ¨μ μΏ ν€λ₯Ό μ½κ³ , μμ νκ³ , μμ ν μ μμ΅λλ€. μ: μΉμ¬μ΄νΈ λ‘κ·ΈμΈ μ격 μ¦λͺ μ κ΄λ¦¬νλ νμ₯ νλ‘κ·Έλ¨μ μ΄ κΆνμ΄ νμν μ μμ΅λλ€.webRequestλ°webRequestBlocking: νμ₯ νλ‘κ·Έλ¨μ΄ λ€νΈμν¬ μμ²μ κ°λ‘μ±κ³ μμ ν μ μλλ‘ ν©λλ€. μ΄ κΆνμ κ΄κ³ λ₯Ό μ°¨λ¨νκ±°λ, HTTP ν€λλ₯Ό μμ νκ±°λ, νΈλν½μ 리λλ μ νλ λ° μ¬μ©λ μ μμ΅λλ€. μ€μ: μ΄ κΆνμ λΈλΌμ°μ μ±λ₯κ³Ό 보μμ μ¬κ°ν μν₯μ λ―ΈμΉ μ μμΌλ―λ‘ κ·Ήλμ μ£Όμλ₯Ό κΈ°μΈμ¬ μ¬μ©ν΄μΌ ν©λλ€.: νμ₯ νλ‘κ·Έλ¨μ λͺ¨λ μΉμ¬μ΄νΈμ λν μ κ·Ό κΆνμ λΆμ¬ν©λλ€. μ΄ κΆνμ λ§€μ° λμ κΆνμ΄λ―λ‘ κ°λ₯ν ν νΌν΄μΌ ν©λλ€. νμ₯ νλ‘κ·Έλ¨μ΄ λͺ¨λ μΉμ¬μ΄νΈμ μνΈ μμ©ν΄μΌ νλ κ²½μ°μλ§ μ΄ κΆνμ μμ²νμμμ€. μ: κΈλ‘λ² κ΄κ³ μ°¨λ¨κΈ°λ μ΄ κΆνμ΄ νμν μ μμ΅λλ€.notifications: νμ₯ νλ‘κ·Έλ¨μ΄ μ¬μ©μμκ² λ°μ€ν¬ν± μλ¦Όμ νμν μ μλλ‘ νμ©ν©λλ€. μ: μ μ΄λ©μΌμ΄λ μμ λ―Έλμ΄ μ λ°μ΄νΈλ₯Ό μ¬μ©μμκ² μ리λ νμ₯ νλ‘κ·Έλ¨μ΄ μ΄λ₯Ό μ¬μ©ν μ μμ΅λλ€.contextMenus: νμ₯ νλ‘κ·Έλ¨μ΄ λΈλΌμ°μ μ 컨ν μ€νΈ λ©λ΄(μ€λ₯Έμͺ½ ν΄λ¦ λ©λ΄)μ νλͺ©μ μΆκ°ν μ μλλ‘ ν©λλ€. μ: μ¬μ©μκ° μ νν ν μ€νΈλ₯Ό λΉ λ₯΄κ² λ²μν μ μλ νμ₯ νλ‘κ·Έλ¨μ λ²μμ μν 컨ν μ€νΈ λ©λ΄ νλͺ©μ μΆκ°ν μ μμ΅λλ€.geolocation: μ¬μ©μμ μμΉμ λν μ κ·Ό κΆνμ λΆμ¬ν©λλ€. μ: λ μ¨ νμ₯ νλ‘κ·Έλ¨μ μ΄ κΆνμ μ¬μ©νμ¬ μ¬μ©μμ νμ¬ μμΉμ λν μΌκΈ° μ보λ₯Ό νμν μ μμ΅λλ€.identity: νμ₯ νλ‘κ·Έλ¨μ΄ ꡬκΈμ Identity APIλ₯Ό μ¬μ©νμ¬ μ¬μ©μλ₯Ό μΈμ¦ν μ μλλ‘ νμ©ν©λλ€. μ΄ κΆνμ μ’ μ’ κ΅¬κΈ μλΉμ€μ ν΅ν©λλ νμ₯ νλ‘κ·Έλ¨μ μ¬μ©λ©λλ€.
κ° κΆν μμ²μ νμ₯ νλ‘κ·Έλ¨μ 곡격 νλ©΄μ μ΅μννκ³ μ¬μ©μ κ°μΈ μ 보λ₯Ό 보νΈνκΈ° μν΄ μ μ€νκ² κ³ λ €ν΄μΌ ν©λλ€. νμ₯ νλ‘κ·Έλ¨μ μλλ κΈ°λ₯μ νμν μ΅μνμ κΆν μ§ν©λ§ μμ²νμμμ€.
κΆν κ΄λ¦¬λ₯Ό μν λͺ¨λ² μ¬λ‘
ν¨κ³Όμ μΈ κΆν κ΄λ¦¬λ μμ νκ³ μ λ’°ν μ μλ λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨μ ꡬμΆνλ λ° νμμ μ λλ€. λ€μμ λ°λΌμΌ ν λͺ κ°μ§ λͺ¨λ² μ¬λ‘μ λλ€:
1. μ΅μ κΆν μμΉ
μ΅μ κΆν μμΉμ μ€μνμμμ€. μ΄ μμΉμ νμ₯ νλ‘κ·Έλ¨μ΄ μλν κΈ°λ₯μ μννλ λ° νμν μ΅μνμ κΆν μ§ν©λ§ μμ²ν΄μΌ νλ€κ³ λͺ μν©λλ€. κ΄λ²μνκ±°λ λΆνμν κΆνμ μμ²νλ©΄ 보μ μ·¨μ½μ±μ μνμ λμ΄κ³ μ¬μ©μ μ λ’°λ₯Ό λ¨μ΄λ¨λ¦΄ μ μμ΅λλ€.
μ: λ₯Ό μμ²νλ λμ activeTabμ μ¬μ©νκ±°λ νμ₯ νλ‘κ·Έλ¨μ΄ μνΈ μμ©ν΄μΌ νλ μΉμ¬μ΄νΈμ λν νΉμ νΈμ€νΈ κΆνμ μ§μ νλ κ²μ κ³ λ €νμμμ€.
2. νΉμ νΈμ€νΈ κΆν
λ₯Ό μμ²νλ λμ νμ₯ νλ‘κ·Έλ¨μ΄ μ κ·Όν΄μΌ νλ μΉμ¬μ΄νΈμ λν νΉμ νΈμ€νΈ κΆνμ μ μΈνμμμ€. μ΄λ κ² νλ©΄ νμ₯ νλ‘κ·Έλ¨μ μ κ·Όμ μ§μ λ λλ©μΈμΌλ‘λ§ μ ννμ¬ λ³΄μ μ·¨μ½μ±μ μ μ¬μ μν₯μ μ€μΌ μ μμ΅λλ€.
μ: νμ₯ νλ‘κ·Έλ¨μ΄ example.com λ° example.orgμ λ°μ΄ν°μ μ κ·Όνλλ‘ νμ©νλ €λ©΄ λ§€λνμ€νΈ νμΌμ λ€μκ³Ό κ°μ νΈμ€νΈ κΆνμ μ μΈνμμμ€:
"permissions": [
"https://example.com/*",
"https://example.org/*"
]
3. μ νμ κΆν
APIμ λν μ κ·Όμ΄ νμν λλ§ μμ²νκΈ° μν΄ μ νμ κΆνμ μ¬μ©νμμμ€. μ νμ κΆνμ μ¬μ©νλ©΄ μ¬μ©μκ° μμ²λ κΆν λΆμ¬λ₯Ό κ±°λΆνλλΌλ μ νλ κΈ°λ₯μΌλ‘ νμ₯ νλ‘κ·Έλ¨μ΄ μλν μ μμ΅λλ€. μ΄λ μ¬μ©μ μ±νλ₯ μ λμ΄κ³ νμ₯ νλ‘κ·Έλ¨ μ€μΉμ μΈμ§λ μνμ μ€μΌ μ μμ΅λλ€.
μ: μμ
λ―Έλμ΄ νλ«νΌκ³Ό ν΅ν©λλ νμ₯ νλ‘κ·Έλ¨μ identity κΆνμ μ νμ κΆνμΌλ‘ μμ²ν μ μμ΅λλ€. μ¬μ©μκ° κΆν λΆμ¬λ₯Ό κ±°λΆνλ©΄ νμ₯ νλ‘κ·Έλ¨μ μμ
λ―Έλμ΄ ν΅ν© μμ΄λ κ³μ μλν μ μμ΅λλ€.
μ νμ κΆνμ μ μΈνλ €λ©΄ λ§€λνμ€νΈ νμΌμ optional_permissions νλλ₯Ό μ¬μ©νμμμ€:
"optional_permissions": [
"identity"
]
κ·Έλ° λ€μ νμ₯ νλ‘κ·Έλ¨μ permissions.contains() λ©μλλ₯Ό μ¬μ©νμ¬ μ νμ κΆνμ΄ λΆμ¬λμλμ§ νμΈν μ μμ΅λλ€:
chrome.permissions.contains({ permissions: ['identity'] }, function(result) {
if (result) {
// Permission granted
} else {
// Permission not granted
}
});
4. μ¬μ©μ κ΅μ‘
νμ₯ νλ‘κ·Έλ¨μ μ€λͺ κ³Ό μ¬μ©μ μΈν°νμ΄μ€μμ κ° κΆνμ΄ νμν μ΄μ λ₯Ό λͺ ννκ² μ€λͺ νμμμ€. ν¬λͺ μ±μ μ λ’°λ₯Ό ꡬμΆνκ³ μ¬μ©μκ° νμ₯ νλ‘κ·Έλ¨μ μ€μΉνκ³ κΆνμ λΆμ¬ν μ§ μ¬λΆμ λν΄ μ 보μ μ κ°ν κ²°μ μ λ΄λ¦¬λ λ° λμμ΄ λ©λλ€. κ° κΆνμ΄ νμ₯ νλ‘κ·Έλ¨μ κΈ°λ₯μ μ€μν μ΄μ λ₯Ό μ€λͺ νλ λ©μμ§λ₯Ό μ¬μ©μμκ² λ³΄μ¬μ£Όλ κ²μ κ³ λ €νμμμ€.
μ: νμ₯ νλ‘κ·Έλ¨μ geolocation κΆνμ΄ νμν κ²½μ°, μ¬μ©μμ νμ¬ μμΉμ λν μΌκΈ° μ보λ₯Ό νμνλ λ° μ¬μ©λλ€κ³ μ€λͺ
νμμμ€.
5. μ λ ₯ μ ν¨μ± κ²μ¬ λ° μ΄κ· (Sanitization)
κ΅μ°¨ μ¬μ΄νΈ μ€ν¬λ¦½ν (XSS) λ° κΈ°ν 보μ μ·¨μ½μ μ λ°©μ§νκΈ° μν΄ νμ μ¬μ©μ μ λ ₯μ μ ν¨μ± κ²μ¬νκ³ μ΄κ· νμμμ€. λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨μ μΉ νμ΄μ§μ 컨ν μ€νΈμμ μμμ μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό μ€νν μ μμΌλ―λ‘ XSS 곡격μ νΉν μ·¨μ½ν©λλ€.
μ: νμ₯ νλ‘κ·Έλ¨μ΄ μ¬μ©μκ° ν μ€νΈλ₯Ό μ λ ₯νλλ‘ νμ©νλ κ²½μ°, μ¬μ©μ μΈν°νμ΄μ€μ νμνκ±°λ λΈλΌμ°μ μ μ μ₯μμ μ μ₯νκΈ° μ μ μ μ¬μ μΌλ‘ μ μμ μΈ μ½λλ₯Ό μ κ±°νκΈ° μν΄ μ λ ₯μ μ΄κ· νμμμ€.
6. μ½ν μΈ λ³΄μ μ μ± (CSP)
νμ₯ νλ‘κ·Έλ¨μ΄ λ‘λν μ μλ μ½ν μΈ μμ€λ₯Ό μ ννκΈ° μν΄ μ격ν μ½ν μΈ λ³΄μ μ μ± (CSP)μ ꡬννμμμ€. μ΄λ XSS 곡격 λ° κΈ°ν 보μ μ·¨μ½μ μ λ°©μ§νλ λ° λμμ΄ λ μ μμ΅λλ€.
CSPλ λ§€λνμ€νΈ νμΌμ content_security_policy νλλ₯Ό μ¬μ©νμ¬ μ μλ©λλ€:
"content_security_policy": "script-src 'self'; object-src 'none'"
μ΄ CSPλ νμ₯ νλ‘κ·Έλ¨μ΄ μ체 μΆμ²μμλ§ μ€ν¬λ¦½νΈλ₯Ό λ‘λνλλ‘ νμ©νκ³ μ΄λ€ μΆμ²μμλ κ°μ²΄ λ‘λλ₯Ό νμ©νμ§ μμ΅λλ€. νμ₯ νλ‘κ·Έλ¨μ νΉμ μꡬ μ¬νμ λ§κ² CSPλ₯Ό μ‘°μ νλ, νμ κ°λ₯ν ν μ νμ μΌλ‘ μ€μ νλλ‘ λ Έλ ₯νμμμ€.
7. μ κΈ°μ μΈ λ³΄μ κ°μ¬
μ μ¬μ μΈ μ·¨μ½μ μ μλ³νκ³ ν΄κ²°νκΈ° μν΄ νμ₯ νλ‘κ·Έλ¨ μ½λμ λν μ κΈ°μ μΈ λ³΄μ κ°μ¬λ₯Ό μννμμμ€. 보μ κ°μ¬λ λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨ λ³΄μ λͺ¨λ² μ¬λ‘μ μ΅μν μλ ¨λ 보μ μ λ¬Έκ°κ° μνν΄μΌ ν©λλ€. μΌλ°μ μΈ λ³΄μ κ²°ν¨μ μλ³νκΈ° μν΄ μλνλ μ½λ λΆμ λꡬλ₯Ό κ³ λ €νμμμ€.
8. 보μ ν΅μ
λμ²μΌλ‘λΆν° μ¬μ©μ λ°μ΄ν°λ₯Ό 보νΈνκΈ° μν΄ λͺ¨λ λ€νΈμν¬ μμ²μ λν΄ λ³΄μ ν΅μ μ±λ(HTTPS)μ μ¬μ©νμμμ€. μνΈνλμ§ μμ μ°κ²°μ ν΅ν΄ λ―Όκ°ν λ°μ΄ν°λ₯Ό 보λ΄μ§ λ§μμμ€.
9. μ’ μμ± μ΅μ μν μ μ§
보μ μ·¨μ½μ μ ν¨μΉνκΈ° μν΄ λͺ¨λ νμ¬ λΌμ΄λΈλ¬λ¦¬ λ° μ’ μμ±μ μ΅μ μνλ‘ μ μ§νμμμ€. μ κΈ°μ μΌλ‘ μ λ°μ΄νΈλ₯Ό νμΈνκ³ μ μνκ² μ μ©νμμμ€.
10. λΈλΌμ°μ λ³ κ³ λ € μ¬ν
κΆν μ²λ¦¬ λ° API λμμ λΈλΌμ°μ λ³ μ°¨μ΄μ μ μΈμ§νμμμ€. νΈνμ±κ³Ό 보μμ 보μ₯νκΈ° μν΄ λͺ¨λ λμ λΈλΌμ°μ (ν¬λ‘¬, νμ΄μ΄νμ€, μ¬ν리 λ±)μμ νμ₯ νλ‘κ·Έλ¨μ μ² μ ν ν μ€νΈνμμμ€.
λ§€λνμ€νΈ νμΌ μμ
λ€μμ λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨μ κΈ°λ³Έ λ§€λνμ€νΈ νμΌ μμμ λλ€:
{
"manifest_version": 3,
"name": "My Extension",
"version": "1.0",
"description": "A simple browser extension",
"permissions": [
"activeTab",
"storage"
],
"background": {
"service_worker": "background.js"
},
"content_scripts": [
{
"matches": ["https://example.com/*"],
"js": ["content.js"]
}
],
"action": {
"default_popup": "popup.html",
"default_icon": {
"16": "images/icon16.png",
"48": "images/icon48.png",
"128": "images/icon128.png"
}
},
"icons": {
"16": "images/icon16.png",
"48": "images/icon48.png",
"128": "images/icon128.png"
}
}
μ΄ λ§€λνμ€νΈ νμΌμ λ€μμ μ μΈν©λλ€:
- νμ₯ νλ‘κ·Έλ¨μ
activeTabλ°storageκΆνμ΄ νμν©λλ€. - νμ₯ νλ‘κ·Έλ¨μλ
background.jsλΌλ λ°±κ·ΈλΌμ΄λ μ€ν¬λ¦½νΈκ° μμ΅λλ€. - νμ₯ νλ‘κ·Έλ¨μ
example.comμ νμ΄μ§μcontent.jsλΌλ μ½ν μΈ μ€ν¬λ¦½νΈλ₯Ό μ£Όμ ν©λλ€. - νμ₯ νλ‘κ·Έλ¨μλ
popup.htmlμ μ μλ νμ UIκ° μλ λΈλΌμ°μ μ‘μ μ΄ μμ΅λλ€. - νμ₯ νλ‘κ·Έλ¨μλ λ€μν ν¬κΈ°μ μμ΄μ½μ΄ μμ΅λλ€.
μ§ννλ 보μ νκ²½
λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨μ 보μ νκ²½μ λμμμ΄ μ§ννκ³ μμ΅λλ€. λΈλΌμ°μ 곡κΈμ 체λ μ μ± νμ₯ νλ‘κ·Έλ¨μΌλ‘λΆν° μ¬μ©μλ₯Ό 보νΈνκΈ° μν΄ μ§μμ μΌλ‘ μλ‘μ΄ λ³΄μ κΈ°λ₯κ³Ό μ μ± μ λμ νκ³ μμ΅λλ€. κ°λ°μλ μ΄λ¬ν λ³νμ λν΄ μ 보λ₯Ό μ»κ³ κ·Έμ λ°λΌ κ°λ° κ΄νμ μ‘°μ ν΄μΌ ν©λλ€.
μλ₯Ό λ€μ΄, ν¬λ‘¬μ Manifest V3λ νμ₯ νλ‘κ·Έλ¨μ΄ μΉ νμ΄μ§μ μνΈ μμ©νκ³ λ€νΈμν¬ μμ²μ μ²λ¦¬νλ λ°©μμ μλΉν λ³νλ₯Ό κ°μ Έμμ΅λλ€. μ΄λ¬ν λ³κ²½ μ¬νμ 보μ λ° κ°μΈ μ 보 보νΈλ₯Ό κ°μ νκΈ° μν΄ μ€κ³λμμ§λ§, κ°λ°μλ μλ‘μ΄ APIλ₯Ό μ€μνκΈ° μν΄ νμ₯ νλ‘κ·Έλ¨μ μ λ°μ΄νΈν΄μΌ νμ΅λλ€.
λꡬ λ° λ¦¬μμ€
κ°λ°μκ° μμ ν λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨μ ꡬμΆνλ λ° λμμ΄ λλ μ¬λ¬ λꡬμ 리μμ€κ° μμ΅λλ€:
- ν¬λ‘¬ νμ₯ νλ‘κ·Έλ¨ ν΄ν·: ν¬λ‘¬ νμ₯ νλ‘κ·Έλ¨μ κ°λ°, λλ²κΉ λ° ν μ€νΈνκΈ° μν λꡬ μΈνΈ.
- νμ΄μ΄νμ€ μ λμ¨ SDK: νμ΄μ΄νμ€ μ λμ¨μ ꡬμΆνκΈ° μν νλ μμν¬.
- 보μ λ¦°ν°: μ½λμμ 보μ μ·¨μ½μ μ μλμΌλ‘ μ€μΊνλ λꡬ.
- λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨ λ³΄μ 체ν¬λ¦¬μ€νΈ: μμ ν νμ₯ νλ‘κ·Έλ¨μ ꡬμΆνκΈ° μν λͺ¨λ² μ¬λ‘ λͺ©λ‘.
- μΉ λ³΄μ 리μμ€: OWASP(Open Web Application Security Project)λ μΉ λ³΄μ λͺ¨λ² μ¬λ‘μ λν κ·μ€ν 리μμ€λ₯Ό μ 곡ν©λλ€.
κ²°λ‘
μλ°μ€ν¬λ¦½νΈ API κΆν κ΄λ¦¬λ₯Ό λ§μ€ν°νλ κ²μ μμ νκ³ μ λ’°ν μ μλ λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨μ ꡬμΆνλ λ° λ§€μ° μ€μν©λλ€. μ΄ κ°μ΄λμ μ€λͺ λ λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄λ©΄ κ°λ°μλ 보μ μ·¨μ½μ±μ μνμ μ΅μννκ³ μ¬μ©μ κ°μΈ μ 보λ₯Ό 보νΈν μ μμ΅λλ€. 보μ νκ²½μ΄ κ³μ μ§νν¨μ λ°λΌ κ°λ°μλ μ 보λ₯Ό μ»κ³ κ°λ° κ΄νμ μ‘°μ νμ¬ νμ₯ νλ‘κ·Έλ¨μ μμ κ³Ό 무결μ±μ 보μ₯ν΄μΌ ν©λλ€. λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨μ κ°λ°ν λ νμ μ¬μ©μ κ°μΈ μ 보 보νΈμ 보μμ μ°μ μνλ κ²μ κΈ°μ΅νμμμ€.
κ°λ ₯ν κΆν κ΄λ¦¬ μ λ΅μ ꡬννκ³ , μ¬μ©μ μ λ ₯μ μ ν¨μ± κ²μ¬νκ³ , CSPλ₯Ό μ¬μ©νκ³ , μ κΈ°μ μΈ λ³΄μ κ°μ¬λ₯Ό μνν¨μΌλ‘μ¨ κ°λ°μλ μ¬μ©μ λ°μ΄ν°λ₯Ό 보νΈνλ©΄μ μ¬μ©μ κ²½νμ ν₯μμν€λ λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨μ λ§λ€ μ μμ΅λλ€. μμ ν μ½λ© κ΄νμ λν μ½μμ λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨μ΄ μΉ λΈλΌμ°μ§ κ²½νμ κ·μ€ν μμ°μΌλ‘ λ¨μ μ μΈκ³ μ¬μ©μλ€ μ¬μ΄μμ μ λ’°μ νμ μ μ‘°μ±νλλ‘ λ³΄μ₯ν©λλ€.