프로젝트 진행 중 다음과 작성한 게시물을 확인하는 페이지에서 다음과 같이, HTML 요소가 문자열로 출력되는 현상이 있었습니다.
이렇게 출력되는 이유는, cross-site scripting (XSS) 공격을 막기 위해서입니다.
쉽게 말하면, html 내부 script로 인해 유저의 쿠키 등 개인 정보를 탈취할 수 있기 때문이죠.
https://reactjs.org/docs/dom-elements.html#dangerouslysetinnerhtml
dangerouslySetInnerHTML is React’s replacement for using innerHTML in the browser DOM.
In general, setting HTML from code is risky because it’s easy to inadvertently expose your users to a cross-site scripting (XSS) attack.
So, you can set HTML directly from React, but you have to type out dangerouslySetInnerHTML and pass an object with an __html key, to remind yourself that it’s dangerous. For example:
function createMarkup() {
return {__html: 'First · Second'};
}
function MyComponent() {
return <div dangerouslySetInnerHTML={createMarkup()} />;
}
제 프로젝트의 경우 다음과 같이 적용하면 되겠네요
{Post ? (
<div dangerouslySetInnerHTML={{ __html: Post.contents }}></div>
) : (
""
)}
참고한 글)
'React, Next, Redux > ⚛ React.JS' 카테고리의 다른 글
state의 특성과 setState 함수형 업데이트 (4) | 2020.09.01 |
---|---|
React 파일, 컴포넌트 관리를 위한 atomic design (0) | 2020.08.25 |
react + multer-s3 이미지 전송 (0) | 2020.07.22 |
React + ckeditor v5 문서 정리 (2) | 2020.07.14 |
Loadable Components를 통한 코드 스플리팅 (0) | 2020.07.10 |