html์ ์ ํ ์ด์ค์ผ์ดํํ์ง ์๋ ์ต์ ์ ์ถ๊ฐํ ์ ์์ต๋๊น?
๋๋ ๊ทธ๊ฒ์ ํ
์คํธํ์ง ์์์ง๋ง ๋งค๋ด์ผ ํ์ด์ง์ ๋ฐ๋ฅด๋ฉด :
All variables are HTML escaped by default. If you want to return unescaped HTML, use the triple mustache: {{{name}}}.
๊ทธ๋๋ ์๋ํ์ง ์์ผ๋ฉด ๋จ์ํ ์
๋ ฅ์ ์ด์ค์ผ์ดํ ์ฒ๋ฆฌํ์ง ์๊ณ ๋ฐํํ๋ ํจ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์, ํ์ฌ ๋์์ด์ง๋ง ์ด์ ๋ํ ์ ์ฌ์ฉ ์ฌ๋ก์๋ ๋งค์ฐ ์ ๋ขฐํ ์ ์๋ ์ ๋ ฅ๊ณผ ๋ง์ ํน์ ๋ฌธ์๊ฐ ์์ต๋๋ค.
๋๋ ์ด ๋ถ๋ถ์ ์ธ๊ธํ๊ณ ์์๋ค.
If you want to return unescaped HTML, use the triple mustache: {{{name}}}.
๋ฐ๋ผ์ ๋ณ์๋ฅผ ์ด์ค์ผ์ดํํ์ง ์์ผ๋ ค๋ฉด ์ด์ค ์ฝง์์ผ ๋์ ์ผ์ค ์ฝง์์ผ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
ํธ์ง: ๋๋ ๊ทธ๊ฒ์ ํ
์คํธํ๊ณ ์ด๊ฒ์ ์ด ๊ตฌํ์์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํ๋์์ต๋๋ค.
์, ๊ธฐ๋ณธ ๋์์ ๋ณ๊ฒฝํ๋ ์ ์ฉํ ๋ฐ๋ก ๊ฐ๊ธฐ๊ฐ ์๋์ง ๊ถ๊ธํฉ๋๋ค.
์ผ๋ถ ๊ตฌํ์ ๊ณผ๊ฑฐ์ ์ญ ์ด์ค์ผ์ดํ pragma๋ฅผ ์ง์ํ์ต๋๋ค(mustache.php v1.x, ruby โโv0.8ish). ์ด๊ฒ์ ๋ณธ์ง์ ์ผ๋ก {{ foo }}
์ {{{ foo }}}
์ ์๋ฏธ๋ฅผ ๋ฐ๊ฟจ์ต๋๋ค. ini ํ์ผ๊ณผ ๊ฐ์ ๋น-html ์ฌ์ฉ์ ์ ์ฉํฉ๋๋ค. ์ด ๊ฒฝ์ฐ html ์ํฐํฐ๋ฅผ ์ด์ค์ผ์ดํํ๋ ๊ฒ์ด ์๋ฏธ๊ฐ ์๊ณ ์ถ๊ฐ ์ฝง์์ผ์ ๋ง์ด ์ ์ฝํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
Mustache.php v2.x๋ ์ด pragma๋ฅผ ์ง์ํ์ง ์์ต๋๋ค. ๋์ ์ฌ์ฉ์๊ฐ ๋์ฒด ์ด์ค์ผ์ดํ ์ฝ๋ฐฑ์ ์ ๋ฌํ ์ ์๋๋ก ์ฌ์ฉ์ ์ง์ '์ด์ค์ผ์ดํ' ์ต์
์ ์ ํํ์ต๋๋ค. function($text) { return $text; }
์ ๋ฌํ๋ฉด ํ์ถ์ด ๊ธ์ง๋ฉ๋๋ค.
ํ , ์ ์ ์ค ์ผ์ด์ค์ ๋ฑ ๋ง์ต๋๋ค. mustache.js์์ ๊ทธ๋ ๊ฒ ํ ์ ์์ต๋๊น? ๊ทธ๋ ๋ค๋ฉด ํด๋น ๊ธฐ๋ฅ์ ์ด๋์ ์ ๋ฌํ ๊ฒ์ ๋๊น?
๋ง์ต๋๋ค. OWASP ์ง์นจ์ ๋ฐ๋ฅด๋ ๊ฒ์ ๊ด์ฐฎ์ง๋ง ํญ์ ํ์ถํ๋ ๊ฒ์ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์ ์ฉํ์ง ์์ต๋๋ค. ์ด ๋ฌธ์ ๊ฐ ์๋ฃ๋๊ธฐ๊น์ง์ ETA๊ฐ ์์ต๋๊น?
์ค์น์ ํ์์์ {{{
์ {{
๋ฅผ ๋ฐ๊พธ๋ ๊ฒ์ด ๋ ์ฝ์ง ์์๊น์?
ํ์ฌ ๋๋ ๊ทธ๋ฅ ์คํ :
template.replace(/\{\{([^\}]*)\}\}/g, '{{{$1}}}');
์คํํ๊ธฐ ์ ์ ๋ชจ๋ ํ ํ๋ฆฟ์์ ์๋ํฉ๋๋ค. ์์คํ ์ด ๋ ๋ง์ด ๋ด์ฅ๋์ด ์์ผ๋ฉด ์ข์ ๊ฒ์ ๋๋ค. ๋๋ @bobthecow ์ ์ ์์ ์์ฃผ ์ข์ํฉ๋๋ค. ํ์ํ ๊ฒฝ์ฐ ๋ค๋ฅธ ๊ฒ์ ํผํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์๋ฅผ ๋ค์ด XML์ด ์๋ ํ์๊ณผ ๊ฐ์ JSON์ด ์๋ ๊ฒฝ์ฐ ๋ฐ์ดํ/์ผํ/์ฝ๋ก ๋ฑ์ ์ด์ค์ผ์ดํํ ์ ์์ต๋๋ค.
@janl ๋ ๊ฐ์ง ์๋๋ฆฌ์ค์์ ๋์ผํ ํ ํ๋ฆฟ์ ๋ ๋๋ง
@bobthecow ์ฐ๋ฆฌ๋ mustache.js์์ ๋์ผํ ์ ๊ทผ ๋ฐฉ์์ ์ฝ๊ฒ ์ทจํ๊ณ ๋ชจ๋ ์ด์ค์ผ์ดํ์ ๋ํด Mustache.escapeHtml์ ๋ด๋ณด๋ธ ๋ฒ์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ฌ์ฉ์๋ ๋ค์๊ณผ ๊ฐ์ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
Mustache.escapeHtml = function (text) { return text; }
์ ์ฉํ ๊น์? ๋ฌผ๋ก ํ์ ํธ์ถ์์ ์ด์ค์ผ์ดํ๊ฐ ์ ๋๋ก ์๋ํ๋๋ก ํ๋ ค๋ฉด ํจ์ ๊ฐ์ ์ฌ์ค์ ํ๋ ๋ฐ ์ฃผ์ํด์ผ ํ๋ฉฐ ํธ๋ฆฌํ ์คํ์ผ๋ก ์ด์ค์ผ์ดํ๋ฅผ ๊ฒฐ์ ํ ์ ์์ต๋๋ค.
:+1: ๋๋ ๊ทธ๊ฒ์ ํํค์น๋ค. ๋ด๊ฐ ๋งํ ์ ์๋ ํ, ์ฃผ์ ์ฌ์ฉ ์ฌ๋ก๋ HTML์ด ์๋ ๋ฌธ์์ด๊ธฐ ๋๋ฌธ์ ์ด์ค์ผ์ดํ๋ฅผ ์์ ํ ๋นํ์ฑํํ๋ ๊ฒ์ ๋๋ค. ๋๋ ์ด์ค์ผ์ดํ/noescape๋ฅผ ๋ฐ๊พธ๋ ๋ฐ ๋ง์ด ์ฌ์ฉํ์ง ์๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค(์ด ๋๋ฌธ์ Mustache.php v2์์ ๊ตฌํํ์ง๋ ์์์ต๋๋ค).
์, ๊ทธ๊ฒ์ ํ์คํ ๋ด ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ถฉ์กฑ์ํฌ ๊ฒ์ด๋ฉฐ ๋ค๋ฅธ ์ฌ๋๋ค์ด ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ๋ ๊ฒ์ ์์ํ ์ ์์ต๋๋ค.
Mustache.escapeHtml = function (text) { return text.replace(/\"/g, '\\"'; }
๋ฌธ์์ด์ ์ด์ค์ผ์ดํํฉ๋๋ค. ๋๋ ํ์ดํธ๋ฆฌ์คํธ ๊ธฐ๋ฅ์ ๊ตฌํํ ์๋ ์์ต๋๋ค. ๊ฐ๋จํ ๋งํด์ ๋ด๊ฐ ์๊ฐํ ์ ์๋ ๋ชจ๋ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
๋๋ ๊ทธ๊ฒ์ ํ ์คํธํ์ง ์์์ง๋ง ๋งค๋ด์ผ ํ์ด์ง์ ๋ฐ๋ฅด๋ฉด :
All variables are HTML escaped by default. If you want to return unescaped HTML, use the triple mustache: {{{name}}}.
๊ทธ๋๋ ์๋ํ์ง ์์ผ๋ฉด ๋จ์ํ ์ ๋ ฅ์ ์ด์ค์ผ์ดํ ์ฒ๋ฆฌํ์ง ์๊ณ ๋ฐํํ๋ ํจ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์์ฒญ ๊ณ ๋ง์!! ์ด๊ฒ์ ์๋ํฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋๋ ๊ทธ๊ฒ์ ํ ์คํธํ์ง ์์์ง๋ง ๋งค๋ด์ผ ํ์ด์ง์ ๋ฐ๋ฅด๋ฉด :
All variables are HTML escaped by default. If you want to return unescaped HTML, use the triple mustache: {{{name}}}.
๊ทธ๋๋ ์๋ํ์ง ์์ผ๋ฉด ๋จ์ํ ์ ๋ ฅ์ ์ด์ค์ผ์ดํ ์ฒ๋ฆฌํ์ง ์๊ณ ๋ฐํํ๋ ํจ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.