ํ์ฌ MathJax ๊ตฌํ์ ํ๋ ์ธ๊ณ์์ ์์ ํ์ง ์์ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋๊ณ ๊ธฐ๋ณธ Content-Security-Policy(http://www.w3.org/TR/CSP/) ํค๋์ ํจ๊ป ์ฌ์ฉํ ์ ์๋ ๋ค์ ๊ธฐ๋ฅ์ ์ฌ์ฉํฉ๋๋ค.
๋ฌธ์ (2)๊ฐ ์์ ๋์ด์ผ ํ๋์ง ์ฌ๋ถ๋ ๋ ผ์์ ์ฌ์ง๊ฐ ์์ง๋ง Content-Security-Policy๊ฐ MathJax๊ฐ ์ ๋ขฐํ ์ ์๋ ์คํฌ๋ฆฝํธ๋ก ์คํ๋๊ณ ๋์์ ๋ค๋ฅธ ๋ชจ๋ JavaScript๋ฅผ ํด์ํ์ง ๋ชปํ๋๋ก ํ ๋งํผ ์ถฉ๋ถํ ์ธ๋ถ์ฑ์ด ์๊ธฐ ๋๋ฌธ์ ์ต์ํ (1)์ ์์ ๋์ด์ผ ํฉ๋๋ค. ํน๋ณํ ์ ๋ขฐํ ์ ์๋ ํ์ผ๋ก ์ง์ ํฉ๋๋ค. ํ์ฌ MathJax๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋ชจ๋ ๊ณณ์์ eval()์ ํ์ฉํด์ผ ํฉ๋๋ค. ๋ฌธ์ (1)์ ๋ํ ๋ฒ๊ทธ #130์ ์ ๋ฐํฉ๋๋ค(MathJax๋ ECMAScript 5 ์๊ฒฉ ๋ชจ๋์ ํธํ๋์ง ์์).
ํ์ฌ MathJax๊ฐ ์๋ํ๋๋ก ํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ๋ก์ปฌ์ ์ค์น๋ MathJax ์ฝ๋๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ๋ค์ CSP HTTP ํค๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค(์ฌ์ฉ๋์ง ์๋ "์ต์ " ํค๋๋ Firefox 13.0 ์ดํ์ ํฌํจ๋จ).
X-Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; options eval-script
X-WebKit-CSP: default-src 'self'; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'
Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'
์ด๋ฌํ ํค๋๋ ์ผ๋ถ CSP ์ ๊ณต ๋ณดํธ๋ฅผ ํ์ฉํ๊ณ MathJax๊ฐ ํ์ด์ง ์ฝํ ์ธ ์ ๋์ผํ ์ถ์ฒ์์ ๋ฐฐํฌ๋๋ ๊ฒฝ์ฐ MathJax๊ฐ ๊ณ์ ์๋ํ๋๋ก ํ์ฉํฉ๋๋ค.
์์ ํ์ง ์์ ํ๊ฐ๋ ๋์๊ฒ๋ ํฐ ๋ฌธ์ ์
๋๋ค. ๊ณง ํฌ๋กฌ์ ๋ชจ๋ ํ์ฅ ํ๋ก๊ทธ๋จ์ด eval
์ฌ์ฉ์ ๊ธ์งํ๋ ์ฝํ
์ธ ๋ณด์ ์ ์ฑ
์ ์ฑํํ๋๋ก ํ ๊ฒ์
๋๋ค. ์ฐ๋ฆฌ๋ ํ์ฌ ์ด๊ฒ์ ์ค์ํ๊ธฐ ์ํด Readium ์ ์
๊ทธ๋ ์ด๋ํ๋ ค๊ณ ํ์ง๋ง ๊ทธ๋ ๊ฒ ํ ์ ์๊ณ MathJax๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
+1
๊ณ ๋ง์ ์๋ค์. ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์๋น ์ ๋ฐ์ดํธ์ผ ๋ฟ์ ๋๋ค. ๊ณง ์ผ๋ถ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค(ํฌ๋กฌ ์คํ ์ด์ ์ถฉ๋ถํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค). ๊ทธ๋ฌ๋ ์ฑ๋ฅ์ด ์ด๋ป๊ฒ ์ ํ๋ ์ง ํ์คํ์ง ์์ต๋๋ค. ์ง์ํ ์ ์๋ฏ์ด ๋์ ์ ์์ต๋๋ค. @dpvc ๊ฐ ์ด๊ฒ์ ๋ ์์ธํ ์ดํด๋ณด๊ณ ์คํ์ ์ธ ๋ถ๊ธฐ๋ฅผ ๋ง๋ค ์ ์์ ๋ ๊ณ์ ์ ๋ฐ์ดํธํ๊ฒ ์ต๋๋ค.
ํน์ ์ฝ๋์ ๋ํ ์ถ๊ฐ ์๊ฒฌ, ์ง๋ฌธ ๋ฐ ์ ์ ์ฌํญ์ด ์์ผ๋ฉด ์๋ ค์ฃผ์ญ์์ค.
๋๋ ๊ทธ๊ฒ์ ์ค์ค๋ก ์กฐ์ฌํ๋ ๋ฐ ์ฝ๊ฐ์ ์๊ฐ์ ๋ณด๋๋ค. ์ฃ๋ถ๋ฅธ ์ต์ ํ๋ ๊ทธ๋ง๋ฌ์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฌธ์์ด์ ํ๊ฐํ๋ ๊ฒ์ ํด๋ก์ ๋ฅผ ๋ง๋๋ ๊ฒ๋ณด๋ค ๋น ๋ฅด์ง ์์ต๋๋ค.
๋ํ eval()
๋ฅผ ์คํํ ์ ์๋์ง ํ์ธํ๊ธฐ ์ํด Mathjax๋ฅผ ๋ก๋ํ๋ ๋ชจ๋ ํ์ด์ง์์ eval()
๋ฅผ ์คํํด์๋ ์ ๋ฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๊ฒ์ ๊ฐ์ผ ํฉ๋๋ค.
new Function()
ํธ์ถ์ ์๋๊ฐ ์๋๋ผ ๋ฉ๋ชจ๋ฆฌ์
๋๋ค. new Function()
๋ ํด๋ก์ ๋ฅผ ์์ฑํ์ง ์์ผ๋ฏ๋ก ๋ก์ปฌ ๋ฒ์๋ฅผ ์ ์งํ์ง ์์ต๋๋ค. ์ด๊ฒ์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ ํต์ฌ์ด๋ฉฐ ์ฌ์ฉ ์ค์ธ ๊ฐ์ฒด๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ์ต๊ทผ ๋ธ๋ผ์ฐ์ ์์ ํ
์คํธ๋ฅผ ์ํํ์ง ์์์ต๋๋ค.
eval
์ฌ์ฉ์ ๊ฒฝ์ฐ MathJax๋ ์ธ๋ผ์ธ ๊ตฌ์ฑ ๋ธ๋ก์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ด๋ฅผ ์ฌ์ฉํ๋ฉฐ ํ์ฌ๋ก์๋ ์ฝ๊ฒ ๊ต์ฒดํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ MathJax์ "์์ ํ" ๋ฒ์ ์ ์ธ๋ถ ๊ตฌ์ฑ ํ์ผ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค(์ด ํ์ผ์ ๋ฌธ์ ๊ฐ ๋์ง ์์ผ๋ฉฐ ๋ณด์ ์ ์ฑ
์ ๋ ๋ถํฉํ ์ ์์). ์ฐธ์กฐํ๋ eval
ํธ์ถ์ eval
๋ฅผ ์คํํ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ์ด ์๋๋ผ ์ ์ญ ๋ค์์คํ์ด์ค์์ ์คํ๋๋์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ์
๋๋ค(๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ๊ทธ๋ ์ง๋ ์์). ๊ทํ์ ๋ณด์ ์๊ตฌ ์ฌํญ์ ๋ง๋ ๋ฒ์ ์ ๊ฒฝ์ฐ ์ด ํญ๋ชฉ์ ์ ๊ฑฐํด์ผ ํ๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์ ํด๋ก์ ๊ฐ ์๋ํ๋ ๋ฐฉ์์ ๊ทธ๋ ์ง ์์ต๋๋ค . ๋น์ ์ ์ง์ญ ๋ฒ์์ ๋ชจ๋ ๊ฒ์ ๋ถ์ก๊ณ ์์ง ์์ต๋๋ค. ํจ์์์ ์ฌ์ฉํ๋ ๊ฒ๋ง ์บก์ฒํฉ๋๋ค. CONSTRUCTOR
ํจ์๋ ๋ก์ปฌ ๋ฒ์์์ ์๋ฌด ๊ฒ๋ ์ฌ์ฉํ์ง ์์ผ๋ฉฐ ํด๋ก์ ๋ฅผ ๋ง๋๋ ๋ฐ ๋น์ฉ์ด ๋ค์ง ์์ต๋๋ค. ์ด๊ฒ์ ์กด์ฌํ ์ ์ด ์๋ ๋ฌธ์ ์ ๋ํ ์กฐ๊ธฐ ์ต์ ํ์
๋๋ค.
eval
์ ๊ดํ ํ ๋ด ์์ ์ ํ์ํ์ง ์์ ๊ฒฝ์ฐ, ํนํ ์์ ํ์ง ์์ eval()
๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋์ธ ๊ฒฝ์ฐ ํ์ด์ง์์ ์ฝ๋๋ฅผ ์คํํ์ง ์์์ผ ํ๋ค๋ ๊ฒ์
๋๋ค. Mathjax๊ฐ ์ธ๋ผ์ธ ๊ตฌ์ฑ์ ํฌํจ๋ ๊ฒฝ์ฐ์๋ง ํด๋น EVAL
ํจ์๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ํ์ํ ๋๊น์ง ํ
์คํธ๋ฅผ ์คํํ์ง ๋ง์ญ์์ค. ๊ทธ๋ฌ๋ ์ค์ ๋ก ๊ตฌ์ฑ์ด ์คํ ๊ฐ๋ฅํ ์ฝ๋์ฌ์ผ ํ๋ ์ด์ ๋ ๋ฌด์์
๋๊น? ์ค์ ๋ก ํจ์์ ์ ๋ฌ๋๋ JSON ๋ฉ์ด๋ฆฌ์
๋๋ค. JSON์ ์ ๋ฌํ๊ณ ๊ตฌ๋ฌธ ๋ถ์ํ๊ณ MathJAX๊ฐ ํจ์๋ฅผ ํธ์ถํ๋๋ก ํ์ง ์๋ ์ด์ ๋ ๋ฌด์์
๋๊น?
์๋ฐ์คํฌ๋ฆฝํธ์์ ํด๋ก์ ๊ฐ ์๋ํ๋ ๋ฐฉ์์ ๊ทธ๋ ์ง ์์ต๋๋ค . ๋น์ ์ ์ง์ญ ๋ฒ์์ ๋ชจ๋ ๊ฒ์ ๋ถ์ก๊ณ ์์ง ์์ต๋๋ค. ํจ์์์ ์ฌ์ฉํ๋ ๊ฒ๋ง ์บก์ฒํฉ๋๋ค.
๋๋ ์ํฉ์ด ๊ทธ๋ ๊ฒ ๋ช ํํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฒซ์งธ, ์ด๊ฒ์ ์ฝ๋์ ํด๋น ๋ถ๋ถ์ด ์์ฑ๋ 2008๋ ์ ๊ฒฝ์ฐ๊ฐ _์๋๋๋ค_. ์ค๋ ์์นจ์ ํ ์คํธ๋ฅผ ์คํํ๋๋ฐ ๋น์ ์ฌ์ฉ ์ค์ธ Safari, Firefox, Opera ๋ฐ IE์ ๋ฒ์ ์ด ๋ชจ๋ ๋ด๊ฐ ์ค๋ช ํ ๋๋ก ์๋ํ์์ ํ์ธํ๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค(์ฌ์ฉ๋ ๋ณ์์ ๊ด๊ณ์์ด ์ ์ฒด ๋ฒ์ ์ฒด์ธ์ด ํด๋ก์ ์ ์ ์ง๋์์ต๋๋ค. ). ์ด์ ๋ํ ๋ด ์ฐธ์กฐ ์ฌ์ดํธ๋ ์ค๋ ์์นจ์ ๋ค์ด๋ ๊ฒ ๊ฐ์์(์ด์ ์ฌ๋ผ์ด) ์ธ๋ถ ์ฌํญ์ ํ์ธํ ์๋ ์์ง๋ง ์ด๊ฒ์ด ECMAScript 262 ์ฌ์์ ์ผ๋ถ์๋ ๊ฒ์ผ๋ก ๊ธฐ์ตํฉ๋๋ค.
Safari, Chrome, Firefox ๋ฐ IE์ ํ์ฌ ๋ฒ์ ์ ๊ทํ๊ฐ ์ค๋ช ํ๋ ๋๋ก ์๋ํ๋ ๊ฒ์ผ๋ก ๋ณด์ด๋ฏ๋ก ๊ทธ ์ดํ๋ก ์ํฉ์ด ๋ณ๊ฒฝ๋์์ต๋๋ค. Safari 4, Firefox 3.6 ๋ฐ IE9์์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์ํ ๊ฒ ๊ฐ์ต๋๋ค. ํ ์คํธํ Chrome์ ์ด์ ๋ฒ์ ์ด ์์ผ๋ฏ๋ก ๊ฑฐ๊ธฐ์ ๋ํ ๊ธฐ๋ก์ ๋ชจ๋ฆ ๋๋ค. IE8์ ์ด์ ๋์์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ Opera 12๋ ์ฌ์ ํ ๋์ํฉ๋๋ค. ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ๋ ํ์ธํ์ง ์์์ต๋๋ค. ์ด๋ฌํ ๋ธ๋ผ์ฐ์ ์ค ์ผ๋ถ๋ MathJax์ ์ง์ ๋ชฉ๋ก์ ์์ผ๋ฏ๋ก ์ผ๋ฐ์ ์ผ๋ก MathJax์ ๋ํด ๊ณ ๋ คํด์ผ ํ๋ ๋ฌธ์ ์ ๋๋ค. ๋ฌผ๋ก , ๋๋ ๋น์ ์ ํ์์ ๋ง๋ ๊ฒ์ด ์์ ๊ฒ์ด๋ผ๊ณ ํ์ ํฉ๋๋ค.
JSON ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ ๊ตฌ์ฑ ๋ธ๋ก์ MathJax.Hub.Config()
ํธ์ถ ์ด์์ผ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ค์นํ๊ฑฐ๋ TeX ์
๋ ฅ jax์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ฌ ์ถ๊ฐ ๋ช
๋ น์ ๊ตฌํํ๋ ๋ฑ์ ์์
์ ์ํํ ์ ์์ต๋๋ค. ์คํ ์ฝ๋๊ฐ ํฌํจ๋์ด ์์ผ๋ฏ๋ก JSON ๋ฐ์ดํฐ์ ์ผ๋ถ๊ฐ ๋ ์ ์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ด ํญ์ ์ฌ์ฉ๋๋ ๊ฒ์ ์๋์ง๋ง ์ค์ ์น ์ฌ์ดํธ์์ ํ์คํ ์ฌ์ฉ _is_ ํฉ๋๋ค. ๋ํ ๋ชจ๋ ๋์ ๋ธ๋ผ์ฐ์ ์ JSON ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ด์ฅ๋์ด ์๋ ๊ฒ์ ์๋๋ฏ๋ก ๊ตฌ๋ฌธ ๋ถ์์ ์ํํ๋ ค๋ฉด ์ถ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค. (๋ฌผ๋ก ๊ทน๋ณตํ ์ ์๋ ๊ฒ์ ์๋์ง๋ง ๋ ๋ง์ ์ฝ๋๋ฅผ ๋ค์ด๋ก๋ํด์ผ ํฉ๋๋ค.)
์ด๊ฒ์ ๋ณ๊ฒฝํ๋ฉด +1์ด ๋ฉ๋๋ค. ๊ทธ๋์ (๋ฌด์๋ณด๋ค๋) Github์ด ๊ทธ๋ค์ ์ํค์์ MathJax๋ฅผ ๋ค์ ํ์ฉํ ๊ฒ์ ๋๋ค.
@ketch ์ด์ ๊ด๋ จํ์ฌ Github์์ ์ธ๊ธํ ๋ด์ฉ์ด ์์ต๋๊น? ์ด ๋ฌธ์ ๊ฐ Github Wiki ๋ณด์์ ์ด๋ป๊ฒ ์ํฅ์ ๋ฏธ์น๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
@pkra ์ด๊ฒ์ด ์์ธ์ธ์ง๋ ํ์คํ์ง ์์ง๋ง ๊ทธ๋ ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ์ด ํ์ด์ง์ ๋ฌ๋ฆฐ ๋๊ธ์ ์ํด ์ด๋ ๊ฒ ๋์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ด๋ผ
https://github.com/blog/1477-content-security-policy
MathJax ์ง์์ CSP ๊ธฐ๋ฅ์ ๊ตฌํํจ๊ณผ ๋์์ ์ฌ๋ผ์ก์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค. ํฅ๋ฏธ๋กญ๋ค์. ๋ ๊ฐ์ง๊ฐ ๊ด๋ จ๋์ด ์๋์ง ํ์คํ์ง ์์ง๋ง ๋๊ฐ ์๊ฒ ์ต๋๊น? github ํ์ MathJax๋ฅผ ์ ๊ฑฐํ ์ด์ ์ ๋ํด ๊ณต๊ฐ์ ์ผ๋ก ๋ ผ์ํ ์ ์ด ์์ต๋๋ค. ์ค์ ๋ก ์ค์ ์ ๋ฌธ์ ๊ฐ ๋์ง ์๋ ๊ฒ์ด ์ด์ ์๋ค๋ฉด ๋ถํํ ๊ฒ์ ๋๋ค.
CSP ์ค์๋ฅผ ์ํด +1.
+1
์ด ์ค๋ ๋๋ฅผ ์ฝ๊ณ ๋งค์ฐ ์ ๋ณด๊ฐ ํ๋ถํ๊ณ ์๋นํ ํธํฅ๋์ง ์์ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. ๋๋ ๊ทธ๋ค์ด [github]๊ฐ ๋ณด์ ๋ฌธ์ ์ ๋ํด exec, CSP์ ๊ฐ์ ๊ฒ์ ๋ฐฉ์งํ๊ณ ํ์ฉํ์ง ์์ ๊ฒ์ด๋ผ๋ ๋ด ์ฃผ์ฅ์ ํผ์น ๊ฒ์ ๋๋ค.
๊ทธ ์ฝ๋ ์ํ๊ณผ ๊ณผ๊ฑฐ ๋ฒ์ ์ ๋ํ ์ ํ์ ์ธ ์ปดํจํฐ ์ง์์ ์ํด ์ด๋ฆฌ๋ฅ์ ํ๋ ๊ฒ ์ธ์๋ ๋๋ ๊ทธ๊ฒ์ด ๋งค์ฐ ํฅ๋ฏธ๋กญ๊ณ ๊ณ์ํด์ ์ฌ์ฉํ ์ ์๋๋ก ํด์ผ ํ๋ค๋ ์ ์ฅ์ ์ทจํฉ๋๋ค. ๋ณด์ ๊ด๋ จ ์ธ๊ณ์์ MathJAX๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ๋ก.
๊ทธ๊ฑด ๊ทธ๋ ๊ณ , ๋๋ ์ MathJax๋ฅผ ์ค๋จํ๋์ง์ ๋ํด Github ์ง์ํ์ ์ด๋ฉ์ผ์ ๋ณด๋์ต๋๋ค. ๋ต๋ณ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
CSP๊ฐ ๊ทธ ์ด์ ์ค ํ๋์์ต๋๋ค. ๋ค๋ฅธ ์ด์ ์๋ ์ฑ๋ฅ ๋ฌธ์ ์ ์ด๋ ค์ด ์ ์ง ๊ด๋ฆฌ๊ฐ ํฌํจ๋์์ต๋๋ค. ์ ๊ฑฐํด์ผ ํ๋ ์ด์ ๋ฅผ ์ ๊ฑฐํ๋ฉด ๋ค์ ์ถ๊ฐํ๋ ๊ฒ์ ๊ณ ๋ คํ ์ ์์ง๋ง ์ฝ์ํ ์๋ ์์ต๋๋ค.
@ketch ๊ฐ์ฌํฉ๋๋ค. ์๊ฒ ๋์ด์ ์ข์ต๋๋ค.
@dpvc ์ด๊ฒ์ ๋ค์ ์ด์ ํ์ ์ถ๊ฐํด์ผ ํฉ๋๊น?
:+1:
@pkra , ์ถ๊ฐํ ๊ณํ์ด์์ต๋๋ค. ์์ง ๋ชฉ๋ก์์ ์ซ์๊ฐ ์ด๋ ๊ฒ ๋ง์ด ์ค์ด๋ค์ง ์์์ต๋๋ค.
@dpvc ๋ง์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ์์ ํ๋ ค๋ฉด ์๋นํ ๋ณ๊ฒฝ(ํนํ ์ธ๋ผ์ธ ๊ตฌ์ฑ wrt)์ด ํ์ํ์ง, ์ฆ ๋ฒ์ ์ ํ๊ฐ ํ์ํ์ง ๊ฐ์ฅ ๊ถ๊ธํ์ต๋๋ค.
MathJax ๋ณ์๋ฅผ ํตํ ๊ตฌ์ฑ์ ํ์ฉํ๊ธฐ ์ํด ๋ณ๊ฒฝํ ์ฌํญ์ ์ ํ ์์ด ๋ณ์๋ฅผ ํฌํจํ ์ ์๋๋ก ํด์ผ ํฉ๋๋ค. MathJax.js์ ๋ณ๋ "์์ ํ" ๋ฒ์ ์ ๋ง๋ค ํ์ ์์ด ํ์ ํธํ์ฑ์ ์ฌ์ฉํ์ฌ ์ด ์์ ์ ์ํํ ์ ์๋ค๊ณ ํ์ ํฉ๋๋ค. ๋ฌผ๋ก ๊ฐ๋ฐ ์ค์ ์์ ์ ์์ญ์ด ๋ ์น๋ฅผ ๋์ง๋ ๋ฌด์ธ๊ฐ๊ฐ ๋ํ๋ ์ ์์ต๋๋ค. ์์ง ์์ฑ๋๊ฑฐ๋ ํ ์คํธ๋์ง ์์์ต๋๋ค.
MathJax๋ฅผ ์์ ํ๊ฒ ๋ง๋๋ ๋ฐ +1์ ๋๋ค. ๋ณด์ ๋ฌธ์ ๋ก ์ธํด ํ๋ก๋์ ํ๊ฒฝ์์ ์ด ๋ฉ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ด ๋๋ฌด ์์ฝ์ต๋๋ค.
์ด ๋ฌธ์ ์ ์ง์ ์ด ์์ต๋๊น? ์ ๋ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก MathJax๋ฅผ Chrome ํ์ฅ ํ๋ก๊ทธ๋จ์ด ์๋ ํ์ด์ง์ ์ฃผ์
ํ๋ ค๊ณ ํ๊ณ ์์ผ๋ฉฐ ๋ฒฝ๋ ๋ฒฝ์ด ์๋๋ผ๋ฉด ์ ์ด๋ ์๋นํ ๊ฒฌ๊ณ ํ ๋ฒฝ์ ์น๊ณ ์์ต๋๋ค. emichael/textthings#4์ ์ค๋ช
๋ ๋๋ก ์ง๊ธ ๊ฐ์ฅ ํฐ ๋ฌธ์ ๋ MathJax.js:265
์
๋๋ค. ์ ๋ํ ํธ์ถ์ ์ ๊ฑฐํ ์ ์์์ต๋๋ค.
new Function()
์์์ ์ค๋ช
ํ ๋๋ก ํด๋ก์ ๋ก ๋ณํํ์ฌ ๊ฝค ์ฝ๊ฒ ๋ง๋ค ์ ์์ง๋ง eval
๋๋ ์ธ๋ผ์ธ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋จ์๊ฐ ์์ต๋๋ค.
ํธ์ง: ๊ฒฐ๊ตญ ์ฌ์ฉ์์๊ฒ unsafe-eval ๋ฐ unsafe-inline์ CSP์ ์ถ๊ฐํ ์ ์๋ ์ต์ ์ ์ ๊ณตํ์ง๋ง MathJax๋ฅผ ์์ ํ CSP๋ก ๊ฐ์ ธ์ค๊ธฐ ์ํ ์ฅ๊ธฐ์ ์ธ ์์ ์ ์ข์ ๊ฒ์ ๋๋ค. :+1:
@emichael , ๋ค์ ๋ฆด๋ฆฌ์ค(๋ค์ ๋ฌ ์์ )์ ๋ณ๊ฒฝ ์ฌํญ์ ํฌํจํ ๊ณํ์ด์ง๋ง ์์ง ์ ์ฉํ์ง ์์์ต๋๋ค. ํ ๊ฐ์ง ์ด์ ๋ ์ค์ ๋ก ์ด๊ฒ์ ํ ์คํธํ๋ ๋ฐฉ๋ฒ(ํ์ํ ํ๊ฒฝ์ ์ค์ ํ๋ ๋ฐฉ๋ฒ)์ ์ดํด๋ณด์ง ์์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๋๋ฅผ ๋ด์ผํ ์ง ๋๋ ์ต์ํ์ ํ ์คํธ ํ๊ฒฝ์ด ๋ฌด์์ธ์ง ์ ์ํด ์ฃผ์๋ฉด ๋์์ด ๋ ๊ฒ์ ๋๋ค.
๋ํ eval์ ๋ํ ์ค๋ฅ๋ ๋ฐํ์ ๋๋ ์ปดํ์ผ ์๊ฐ์ ๋ฐ์ํฉ๋๊น? ์ฆ, MathJax.js๊ฐ ์ฌ์ฉํ์ง ์์์์๋ ๋จ์ํ eval ํธ์ถ์ ํฌํจํ๋ฉด ๋ฐ์ํฉ๋๊น, ์๋๋ฉด ์ค์ ๋ก eval์ด ์๋๋ ๋๋ง ๋ฐ์ํฉ๋๊น? ์ฌ์์ ์ฝ์ ๊ฒฐ๊ณผ ๋ฐํ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ฌ ์ํฉ์ด ๋ ๋์์ง ๊ฒ์ด๋ผ๊ณ ์ ์ํ์ง๋ง ๋ต์ ์๊ณ ์์ ๊ฑฐ๋ผ๊ณ ์๊ฐํ์ต๋๋ค.
ํ
์คํธ ์๋ฒ๊ฐ ์๋ ๊ฒฝ์ฐ ์๋ต ํค๋์ Content-Security-Policy๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค. script-src
์ 'unsafe-eval'
๋๋ 'unsafe-inline'
$๊ฐ ํฌํจ๋์ง ์๋์ง ํ์ธํ์ญ์์ค(GitHub ์์ฒด๊ฐ ์ข์ ์์). ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์ต์ํ์ Chrome ํ์ฅ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ์ฌ ํค๋๋ฅผ ์ง์ ์ฝ์
ํ ์ ์์ต๋๋ค.
๋ฐํ์ ์ค๋ฅ์ ๋๋ค.
๊ฐ์ฌ ํด์. ๋ด๊ฐ ๋ฌด์์ ํ ์ ์๋์ง ์์๋ณผ ๊ฒ.
eval ๋ช ๋ น์ ์ธ๋ผ์ธ ๊ตฌ์ฑ ๋ธ๋ก์ ์ฒ๋ฆฌํ๋ ๋ฐ๋ง ์ฌ์ฉ๋ฉ๋๋ค(์ด ๊ฒฝ์ฐ ์ ์ญ ๋ณ์๊ฐ ์ฒ๋ฆฌ๋๋ ๋ฐฉ๋ฒ์ ํ ์คํธํ๊ธฐ ์ํ ์ด๊ธฐ ๊ตฌ์ฑ์ด ์์). ์ด๊ธฐ ์ค์ ์ ์ธ๋ผ์ธ ๊ตฌ์ฑ์ด ์ฌ์ฉ๋ ๋๊น์ง ์ฐ๊ธฐ๋ ์ ์์ผ๋ฉฐ ์ธ๋ผ์ธ ๊ตฌ์ฑ์ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค. v2.3์์๋ eval ์์ด ์ธ๋ผ์ธ ๊ตฌ์ฑ์ ์ํํ๋ ์๋ก์ด ๋ฐฉ๋ฒ์ ์ถ๊ฐํ์ต๋๋ค(์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์ค๋น). ๋ฐ๋ผ์ eval ํธ์ถ์ ํธ๋ฆฌ๊ฑฐํ์ง ์๊ณ ๋ HTML ํ์ผ์ MathJax ๊ตฌ์ฑ์ ๊ณ์ ํฌํจํ ์ ์์ต๋๋ค.
์๊ฒ ์ต๋๋ค. new Function()
๋ฐ eval()
ํธ์ถ์ ์ ๊ฑฐํ๋ ํจ์น๋ฅผ ๋ง๋ค์์ต๋๋ค. ์ต์ ๊ฐ๋ฐ ๋ธ๋์น๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ง๋ง f220993์ ๋์ด๋ ๋ณ๊ฒฝ ์ฌํญ์ ํ์ํ ๊ฒฝ์ฐ MathJax.js
์ ๋ง์คํฐ ๋ณต์ฌ๋ณธ์๋ ์ ์ฉํ ์ ์์ด์ผ ํฉ๋๋ค. ์ธ๋ผ์ธ ์คํ์ผ์ ํ์ฉํด์ผ ํฉ๋๋ค. MathJax๊ฐ ๋๋ฝ๋ ๊ธ๊ผด์ ๋ํ ์๋ต์ ํ
์คํธํ ์ ์๋๋ก about:blank
์ ๋ํ ๊ธ๊ผด ์ฐธ์กฐ๋ ์์ผ๋ฏ๋ก(๋คํธ์ํฌ ์ก์ธ์ค๋ฅผ ๋ง๋ค์ง ์๊ณ ๋) about:
๋ฅผ font-src
์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
๋ฉ์ง! ์คํ์ผ์ 'unsafe-inline'
๊ฐ ํ์ํ ์ด์ ๋ฅผ ์ ์ ์์ต๋๋ค.
script-src 'unsafe-inline'
๊ถํ์ด ์๋ ํ, ๋ด๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ดํดํ๋ค๋ฉด ์ฌ์ฉ์๊ฐ ์์ํ ์ธ๋ผ์ธ MathJax ๊ตฌ์ฑ์ ํฌํจํ ๋๋ง ์คํฌ๋ฆฝํธ๊ฐ ์ธ๋ผ์ธ๋ฉ๋๋ค. script-src
'unsafe-inline'
์์ด ๋ชจ๋ ๊ฒ์ด ์ฌ์ ํ ์๋ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๊ด์ฐฎ์ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ๋ฌธ์์์ ์ธ๊ธํด์ผ ํฉ๋๋ค.
์ธ๋ผ์ธ ์คํฌ๋ฆฝํธ์ ๋ํ ์ดํด๊ฐ ์ ํํฉ๋๋ค. ์ฌ์ฉํ ํ์๊ฐ ์๋ ์ธ๋ผ์ธ ๊ตฌ์ฑ ๋ธ๋ก์ ์ฌ์ฉํ์ง ์๋ ํ script-src 'unsafe-inline'
๊ฐ ํ์ํ์ง ์์ต๋๋ค. ๋ก์ปฌ MathJax ๊ตฌ์ฑ ํ์ผ( config=
์ ์ถ๊ฐ๋จ)์ ์ฌ์ฉํ๊ฑฐ๋ MathJax
๋ณ์๋ฅผ ์ผ๋ฐ์ ์ผ๋ก MathJax.Hub.Config()
์ ์ ๋ฌํ๋ ๊ฐ์ฒด๋ก ์ค์ ํ๋ ์ผ๋ฐ ์คํฌ๋ฆฝํธ ํ์ผ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
var MathJax = {
tex2jax: {
inlineMath: [['$','$'],['\\(','\\)']],
procesEscapes: true
}
};
mathjax-config.js
๋ผ๋ ํ์ผ์ ๋ฃ์ ๋ค์
<script src="mathjax-config.js"></script>
<script src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML"></script>
๊ทธ๊ฒ์ด ๊ทํ์ ์๊ตฌ ์ฌํญ์ ์ฒ๋ฆฌํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ ๋ง์ ๋๋ค. ๋น ๋ฅธ ์์ ๊ฐ์ฌํฉ๋๋ค!!
๊ทธ๋ค์ง ๋น ๋ฅด์ง ์๋ค๊ณ ๋งํ๋ ์ฌ๋๋ค์ด ์์ต๋๋ค(์ด ๋ฌธ์ ๋ 2๋ ๋์ ๊ณต๊ฐ๋์์ต๋๋ค!). ํ์ง๋ง ์ ๋ ๋ค์ ๋ฆด๋ฆฌ์ค๋ก ํ์ํด ๋์๊ณ ์ด์จ๋ ์ด์ ๋ง ๊ฒฐ๋ก ์ ๋ด๋ฆฌ๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ์ ๊ทํ์ ์๊ฒฌ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ ์ ํ ์๊ฐ.
=> ๋ณํฉ๋์์ต๋๋ค.
๊ทธ๋์ ์์ง Mathjax๋ฅผ ํ์ฉํ๋๋ก github์ ์์ฒญํ ์ฌ๋์ด ์์ต๋๊น? Mathjax๋ก ๋ ๋๋งํ๊ธฐ ์ํด github ๋ฌธ์ ์์ tex๋ฅผ ์์ฑํ ์ ์๋ dotjs ํ์ผ์ ์์ฑํ๋ ๊ฒ์ ์ฌ์ ํ โโ๋ถ๊ฐ๋ฅํฉ๋๋ค...
(์ฌ๊ธฐ ์์ - http://stackoverflow.com/questions/16889421/how-to-insert-javascript-to-enable-mathjax-on-github-wiki-pages - ์คํจ)
์๋ ํ์ธ์,
์ ๋ ํ์ฌ github ํ์ด์ง์ jekyll ์ฌ์ดํธ๋ฅผ ํธ์คํ ํ๊ณ ์์ผ๋ฉฐ ์ด ๊ธฐ์ฌ ๋ฅผ ๋ฐ๋ฅด๊ณ ์์ผ๋ฉฐ ๋ค์์ ํฌํจ ํ์ผ์ ์ถ๊ฐํ์ต๋๋ค.
<script type="text/javascript"
src="//cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>
https ๋๋ http์ ํจ๊ป ์๋ํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ชจ๋ ๊ณณ์์ https๊ฐ ์๋ ๋ธ๋ผ์ฐ์ ์์ ๋ด ๋ธ๋ก๊ทธ๋ฅผ ๋ก๋ํ ๋ ์์ ํ์ง ์์ ์คํฌ๋ฆฝํธ๋ฅผ ํ์ฉํ๋๋ก ํด๋ฆญํ ๋๊น์ง ์๋ง์ผ๋ก ๋ณด์ ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ๋์?
@silky ํน์ ํ AFAWK๊ฐ ์์ต๋๋ค. ํด๋ผ์ด์ธํธ ์ธก์ ๊ฐ๋ฅ์ฑ์ด ๋ฎ์ง๋ง MathJax-node๋ ์์ฐ์ ์ธ ๋์์ ์ ๊ณตํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
@diego898 ์ผ๋ฐ์ ์ธ ์ง๋ฌธ์ http://groups.google.com/forum/#!forum/mathjax -users์์ ๋ ์ ๋ง์ต๋๋ค. ํญ์ ๋ผ์ด๋ธ ํ์ด์ง, ๋ธ๋ผ์ฐ์ ๋ฐ OS ์ฌ์ ๋ฑ์ ๋ํ ๋งํฌ๋ฅผ ํฌํจํ์ญ์์ค. ๊ฐ์ฌํฉ๋๋ค.
@pkra ๋๋ ๊ทธ๊ฒ์ด ์ด ๋ฌธ์ ์ ๊ด๋ จ๋ ๋ฒ๊ทธ์ธ์ง, ์๋๋ฉด ๋ด ๊ตฌ์ฑ ๋ฌธ์ ์ธ์ง ํ์ ํ์ง ๋ชปํ๋ค๋ ๊ฒ์ ์ดํดํฉ๋๋ค.
@diego898 ๋ฌธ์ ์์ต๋๋ค. ๊ทํ๊ฐ ์ค๋ช ํ๋ ๋ด์ฉ์ ์ด ๋ฌธ์ ์ ๊ด๋ จ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ด ๋ฌธ์ ๊ฐ ๊ณ์ ํ์๋ฉ๋๋ค. https://github.com/mathjax/MathJax/issues/1988์ ์ฐธ์กฐํ์ญ์์ค.
@kaushalmodi , ๋ฌธ์ ๋ฅผ ํผํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ ์ ๋ด ์ค๋ช ๋๋ ๋งํฌํ ๋ฌธ์ ์ ๋ํ ๋ด ์ค๋ช ์ ์ฐธ์กฐํ์ธ์. ์คํฌ๋ฆฝํธ ์คํ์ ์ ํํ๋ CSP๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ MathJax๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค.
์๋ ๋ฌธ์ ์ (2)๊ฐ ํด๊ฒฐ๋ ์ ์ด ์์ต๋๊น? Mathjax v3๊ฐ ์ฌ์ ํ ์ฝ์ ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@kaushalmodi , ๋ฌธ์ ๋ฅผ ํผํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ ์ ๋ด ์ค๋ช ๋๋ ๋งํฌํ ๋ฌธ์ ์ ๋ํ ๋ด ์ค๋ช ์ ์ฐธ์กฐํ์ธ์. ์คํฌ๋ฆฝํธ ์คํ์ ์ ํํ๋ CSP๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ MathJax๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค.