๐ย Reference
๐ย Chapter
dompurify
โฃ
Props
dangerouslySetInnerHTML
- dangerouslySetInnerHTML
- React(๋ฐ Next.js)์์ ๋ธ๋ผ์ฐ์ ์ DOM์ ์ง์ HTML์ ์ฝ์
ํ ๋ ์ฌ์ฉํ๋ ์์ฑ์ด๋ค.
- ์ผ๋ฐ์ ์ผ๋ก React๋ ๋ณด์์ ์ํด ๋ชจ๋ ๋ฌธ์์ด์ ๋ ๋๋งํ๊ธฐ ์ ์ ์ด์ค์ผ์ดํ(Escape) ์ฒ๋ฆฌ๋ฅผ ํ๋ค. ์๋ฅผ ๋ค์ด,
"<b>์๋
</b>"์ด๋ผ๋ ๋ฌธ์์ด์ ๋ฃ์ผ๋ฉด ํ๋ฉด์ ๋๊บผ์ด ๊ธ์จ๊ฐ ์๋ ํ๊ทธ ๊ทธ๋๋ก๊ฐ ๋ณด์ธ๋ค. ํ์ง๋ง ์ธ๋ถ์์ ๊ฐ์ ธ์จ HTML ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋๋ก ๋ ๋๋งํด์ผ ํ ๋ ์ด ์์ฑ์ ์ฌ์ฉํ๋ค.
dangerously์ธ ์ด์
- ์ด๋ฆ์ด "์ํํ๊ฒ"๋ก ์์ํ๋ ์ด์ ๋ XSS(Cross-Site Scripting) ๊ณต๊ฒฉ์ ๋
ธ์ถ๋ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ง์ฝ ์ ๋ขฐํ ์ ์๋ ์ฌ์ฉ์๋ก๋ถํฐ ์
๋ ฅ๋ฐ์ HTML(์:
<script>alert('ํดํน')</script>)์ ์ด ์์ฑ์ผ๋ก ์คํํ๋ฉด, ์
์ฑ ์คํฌ๋ฆฝํธ๊ฐ ๊ทธ๋๋ก ์คํ๋ ์ ์๋ค.
- ๋ฐ๋ผ์ React๋ ๊ฐ๋ฐ์์๊ฒ "์ด ์ฝ๋๊ฐ ์ํํ๋ค๋ ๊ฒ์ ์ธ์งํ๊ณ ์ฌ์ฉํ๋๊ฐ?"๋ฅผ ๋ช
์์ ์ผ๋ก ๋ฌป๊ธฐ ์ํด ์ด๋ฐ ์ด๋ฆ์ ๋ถ์๋ค.
์ฌ์ฉ๋ฒ
- ์์ฑ ๊ฐ์ผ๋ก๋ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋ฉฐ, ๊ทธ ์์
__html์ด๋ผ๋ ํค๋ก ์ค์ HTML ๋ฌธ์์ด์ ๋ฃ๋๋ค. (๋ฐ์ค์ด ๋ ๊ฐ(__)์ด๋ค!)
function MyComponent() {
const bio = "<strong>์๋
ํ์ธ์!</strong> ์ ๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์
๋๋ค.";
return (
// <div>{bio}</div> ๋ผ๊ณ ์ฐ๋ฉด ํ๊ทธ๊ฐ ํ
์คํธ๋ก ๋ณด์ด์ง๋ง,
// ์๋์ฒ๋ผ ์ฐ๋ฉด <strong> ํ๊ทธ๊ฐ ์ ์ฉ๋์ด ๋ณด์
๋๋ค.
<div dangerouslySetInnerHTML={{ __html: bio }} />
);
}
์ฌ์ฉํ๋ ๊ณณ
- CMS(Content Management System)์์ ์์ฑ๋ ์๋ํฐ ๋ณธ๋ฌธ์ ๋ ๋๋งํ ๋ (์: ๋ค์ด๋ฒ ๋ธ๋ก๊ทธ ํฌ์คํธ ๋ด์ฉ)