λ΄ νλ‘μ νΈμμ λ€μκ³Ό κ°μ λ©ν νκ·Έλ₯Ό μ§μ νμ΅λλ€(λ€μ μ€ν¬λ¦°μ· μ°Έμ‘°).
<meta http-equiv="Content-Security-Policy" content="default-src http:">
νμ΄μ§λ₯Ό λ‘λν λ μ½μμ λ€μ μ€λ₯κ° λ°μν©λλ€.
λꡬλ μ§ μ μμ΄ λ¬Έμ μ μ§λ©΄ νμ΅λκΉ?
λν BTW λ΄ js νμΌμ μ΄λ¦μ sweetalert.min.jsμ΄μ§λ§ νμΌ λ΄μ©μλ μΆμλμ§ μμ jsκ° ν¬ν¨λμ΄ μμ΅λλ€!
μ½μ
λ μΈλΌμΈ μ€νμΌμ μ€ννλ €λ©΄ 'unsafe-inline'(λ°μ΄ν μ£Όμ)μ ν¬ν¨ν΄μΌ νλ style-src
μ§μλ¬Έμ μμ©νλλ‘ Content-Security-Policy κ°μ μ
λ°μ΄νΈν΄μΌ ν©λλ€.
κ°λ°μμκ² CSSμ λν΄ unsafe-inline
μ μ±
μ μ¬μ©νλλ‘ κ°μνλ κ²μ νμ€ν μ΄μμ μ΄μ§ μμ΅λλ€. μ°λ¦¬λ μ΄κ²μ μ²λ¦¬νλ λ λμ λ°©λ²μ μ°ΎμμΌ ν κ²μ
λλ€.
ν κ°μ§ λ°©λ²μ μ½λ λ΄μμ CSS νμΌμ κ°μ Έμ€μ§ μκ³ κ°λ°μ μ½λ λ΄μμ κ°μ Έμ¬ μ μλ λ³λμ νμΌλ‘ μ¬μ©ν μ μλλ‘ νλ κ²μ
λλ€. κ°μ κ²
import 'sweetalert/sweetalert.css
μ΄λ° μμΌλ‘ CSPλ₯Ό μλ°νμ§ μλμ§ νμΈνλ κ²μ κ°λ°μμ μ±
μμ
λλ€.
CSS νμΌμ΄ μλ μμΉμ (κ±°μ) μ무 κ΄λ ¨μ΄ μμ΅λλ€(CSSκ° λμΌν λλ©μΈμ μλ ν). Sweetalert _injects_ μΈλΌμΈ CSS , nonce/hash κ°μ΄ μλ ν κ°μ§ κ°μΉκ° μλ CSPλ νμ©νμ§ μμ΅λλ€. μ€λ μμΉ¨μ λμ΄ μλ κ³ ν΅μ κ²ͺκ³ μμ΅λλ€. λ΄ νλ‘μ νΈμμ μ°κ²°μ ν΄μ ν΄μΌ ν μλ μμ΅λλ€. μ΄λ μ κ° μ λ§ μ’μνκΈ° λλ¬Έμ λΆλλ¬μ΄ μΌμ λλ€.
μ΄μ λν μ λ°μ΄νΈκ° μμμ΅λκΉ? κ°μ λ¬Έμ κ° μμ΅λλ€. μ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ κ°μ₯ μ’μ λ°©λ²μ΄ 무μμΈμ§ κΆκΈνμλκΉ?
ν΄κ²° λ°©λ²μ Content-Security-Policy
ν€λμ ν΄μλ₯Ό μΆκ°νλ κ²μ
λλ€.
κ°μ κ²
style-src 'self' 'sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=' 'sha256-wTr/bct+DGhJCU0mVZOm9Z1v99oBZrIu4VCMYQJWdfI=';
μ΄μμ μ΄μ§λ μμ§λ§ unsafe-inline
λ³΄λ€ λ«μ΅λλ€. λ¬Έμ λ νμΌμ΄ λ³κ²½λλ©΄ ν΄μκ° λ μ΄μ μΌμΉνμ§ μκ³ λΈλΌμ°μ μμ κ±°λΆνλ€λ κ²μ
λλ€.
μ΄μμ μΈ μν©μ CSSλ₯Ό μ체 νμΌλ‘ μΆμΆνκ³ CDNμμ νΈμ€ν νλ κ²μ λλ€. κ·Έλ κ² νλ©΄ νμΌμ νμ΄νΈλ¦¬μ€νΈμ μΆκ°ν μ μμ΅λλ€.
CSS νμΌμ΄ μλ μμΉμ (κ±°μ) μ무 κ΄λ ¨μ΄ μμ΅λλ€(CSSκ° λμΌν λλ©μΈμ μλ ν). Sweetalert _injects_ μΈλΌμΈ CSS , nonce/hash κ°μ΄ μλ ν κ°μ§ κ°μΉκ° μλ CSPλ νμ©νμ§ μμ΅λλ€. μ€λ μμΉ¨μ λμ΄ μλ κ³ ν΅μ κ²ͺκ³ μμ΅λλ€. λ΄ νλ‘μ νΈμμ μ°κ²°μ ν΄μ ν΄μΌ ν μλ μμ΅λλ€. μ΄λ μ κ° μ λ§ μ’μνκΈ° λλ¬Έμ λΆλλ¬μ΄ μΌμ λλ€.
μ¬κΈ°λ λ§μ°¬κ°μ§.
Chromeμ sweetalert.min.jsμμ λ κ°μ μΈλΌμΈ μ€νμΌ ν΄μλ₯Ό μ»μ μ μμ΅λλ€. CSP ν€λμ μΆκ°λλ©΄ Chromeμ λ μ΄μ λΆννμ§ μμ΅λλ€.
κ·Έλ¬λ Firefoxμ Safariλ μ¬μ ν λΆννκ³ μ μ ν ν΄μλ₯Ό μ°Ύμ μ μμ΅λλ€. μ΄λ¬ν λΈλΌμ°μ λ ννΈλ₯Ό μ 곡νμ§ μμ΅λλ€.
νμ΄μ΄νμ€: Content Security Policy: The pageβs settings blocked the loading of a resource at inline (βstyle-srcβ)
μ¬ν리: Refused to apply a stylesheet because its hash, its nonce, or 'unsafe-inline' does not appear in the style-src directive of the Content Security Policy.
κ°μ₯ μ μ©ν λκΈ
ν΄κ²° λ°©λ²μ
Content-Security-Policy
ν€λμ ν΄μλ₯Ό μΆκ°νλ κ²μ λλ€.κ°μ κ²
style-src 'self' 'sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=' 'sha256-wTr/bct+DGhJCU0mVZOm9Z1v99oBZrIu4VCMYQJWdfI=';
μ΄μμ μ΄μ§λ μμ§λ§
unsafe-inline
λ³΄λ€ λ«μ΅λλ€. λ¬Έμ λ νμΌμ΄ λ³κ²½λλ©΄ ν΄μκ° λ μ΄μ μΌμΉνμ§ μκ³ λΈλΌμ°μ μμ κ±°λΆνλ€λ κ²μ λλ€.μ΄μμ μΈ μν©μ CSSλ₯Ό μ체 νμΌλ‘ μΆμΆνκ³ CDNμμ νΈμ€ν νλ κ²μ λλ€. κ·Έλ κ² νλ©΄ νμΌμ νμ΄νΈλ¦¬μ€νΈμ μΆκ°ν μ μμ΅λλ€.