Sweetalert: μ½˜ν…μΈ  λ³΄μ•ˆ μ •μ±… ν˜Έν™˜μ„±

에 λ§Œλ“  2018λ…„ 10μ›” 11일  Β·  8μ½”λ©˜νŠΈ  Β·  좜처: t4t5/sweetalert

λ‚΄ ν”„λ‘œμ νŠΈμ—μ„œ λ‹€μŒκ³Ό 같은 메타 νƒœκ·Έλ₯Ό μ§€μ •ν–ˆμŠ΅λ‹ˆλ‹€(λ‹€μŒ μŠ€ν¬λ¦°μƒ· μ°Έμ‘°).

<meta http-equiv="Content-Security-Policy" content="default-src http:">

image

νŽ˜μ΄μ§€λ₯Ό λ‘œλ“œν•  λ•Œ μ½˜μ†”μ— λ‹€μŒ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

image

λˆ„κ΅¬λ“ μ§€ 전에이 λ¬Έμ œμ— 직면 ν–ˆμŠ΅λ‹ˆκΉŒ?

λ˜ν•œ BTW λ‚΄ js 파일의 이름은 sweetalert.min.jsμ΄μ§€λ§Œ 파일 λ‚΄μš©μ—λŠ” μΆ•μ†Œλ˜μ§€ μ•Šμ€ jsκ°€ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€!

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

ν•΄κ²° 방법은 Content-Security-Policy 헀더에 ν•΄μ‹œλ₯Ό μΆ”κ°€ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

같은 것

style-src 'self' 'sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=' 'sha256-wTr/bct+DGhJCU0mVZOm9Z1v99oBZrIu4VCMYQJWdfI=';

μ΄μƒμ μ΄μ§€λŠ” μ•Šμ§€λ§Œ unsafe-inline 보닀 λ‚«μŠ΅λ‹ˆλ‹€. λ¬Έμ œλŠ” 파일이 λ³€κ²½λ˜λ©΄ ν•΄μ‹œκ°€ 더 이상 μΌμΉ˜ν•˜μ§€ μ•Šκ³  λΈŒλΌμš°μ €μ—μ„œ κ±°λΆ€ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

이상적인 상황은 CSSλ₯Ό 자체 파일둜 μΆ”μΆœν•˜κ³  CDNμ—μ„œ ν˜ΈμŠ€νŒ…ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. κ·Έλ ‡κ²Œ ν•˜λ©΄ νŒŒμΌμ„ ν™”μ΄νŠΈλ¦¬μŠ€νŠΈμ— μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λͺ¨λ“  8 λŒ“κΈ€

μ‚½μž…λœ 인라인 μŠ€νƒ€μΌμ„ μ‹€ν–‰ν•˜λ €λ©΄ '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.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰

κ΄€λ ¨ 문제

adiwithadidas picture adiwithadidas  Β·  4μ½”λ©˜νŠΈ

Untit1ed picture Untit1ed  Β·  5μ½”λ©˜νŠΈ

blackrosezy picture blackrosezy  Β·  6μ½”λ©˜νŠΈ

vmitchell85 picture vmitchell85  Β·  6μ½”λ©˜νŠΈ

mouro001 picture mouro001  Β·  3μ½”λ©˜νŠΈ