<p>MathJax์—๋Š” ์•ˆ์ „ํ•˜์ง€ ์•Š์€ "์ฝ˜ํ…์ธ  ๋ณด์•ˆ ์ •์ฑ…"์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.</p>

์— ๋งŒ๋“  2012๋…„ 06์›” 11์ผ  ยท  42์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: mathjax/MathJax

ํ˜„์žฌ MathJax ๊ตฌํ˜„์€ ํ˜„๋Œ€ ์„ธ๊ณ„์—์„œ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜๊ณ  ๊ธฐ๋ณธ Content-Security-Policy(http://www.w3.org/TR/CSP/) ํ—ค๋”์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๋‹ค์Œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฌธ์ž์—ด์˜ JavaScript ํ‰๊ฐ€(๋ฌธ์ž์—ด ๋˜๋Š” eval()์ด ์žˆ๋Š” new Function()) (1)
  • JavaScript๋ฅผ ํ†ตํ•ด ์‚ฝ์ž…๋œ ์ธ๋ผ์ธ ์Šคํƒ€์ผ ์†์„ฑ(2)

๋ฌธ์ œ (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๊ฐ€ ๊ณ„์† ์ž‘๋™ํ•˜๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

Accepted Fixed Test Not Needed v2.4

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

@kaushalmodi , ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์œ„ ์˜ ๋‚ด ์„ค๋ช… ๋˜๋Š” ๋งํฌํ•œ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋‚ด ์„ค๋ช…์„ ์ฐธ์กฐํ•˜์„ธ์š”. ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์„ ์ œํ•œํ•˜๋Š” CSP๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ MathJax๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  42 ๋Œ“๊ธ€

์•ˆ์ „ํ•˜์ง€ ์•Š์€ ํ‰๊ฐ€๋Š” ๋‚˜์—๊ฒŒ๋„ ํฐ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๊ณง ํฌ๋กฌ์€ ๋ชจ๋“  ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์ด 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 ์ด๊ฒƒ์ด ์›์ธ์ธ์ง€๋Š” ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ๊ทธ๋ ‡๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด ํŽ˜์ด์ง€์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€์— ์˜ํ•ด ์ด๋ ‡๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

http://stackoverflow.com/questions/16889421/how-to-insert-javascript-to-enable-mathjax-on-github-wiki-pages

๊ทธ๋ฆฌ๊ณ  ๋ด๋ผ

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๊ฐ€ ์—ฌ์ „ํžˆ ์‚ฝ์ž…ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰