내 JS 코드에서 innerHTML을 사용하는 것은 위험하다는 말을 들었습니다. 나는 왜 그런지 이해했지만, 누군가이 두 가지 방법을 사용하는 데 차이가 있는지 말해 줄 수 있습니까?innerHTML을 사용할 때 보안 문제는 무엇입니까?
FIRST :
const onePersonArticle = create('article');
onePersonArticle.className = 'one-person';
const content = ` <label class='info-labels' for="name">NAME: </label><label id='name' class='data-labels'>${member.name}</label>
<label class='info-labels' for="phone">PHONE: </label><label id='phone' class='data-labels'>${member.phone}</label>
<label class='info-labels' for="code-wars">CODEWARS: </label><label id='code-wars' class='data-labels'>${member.cwb} - ${member.cwa}</label>
<label class='info-labels' for="free-code-camp">FREECODECAMP: </label><label id='free-code-camp' class='data-labels'>${member.fccb} - ${member.fcca}</label>
<label class='info-labels' for="notes">NOTES: </label><label id='notes' class='data-labels'>${member.notes}</label>
<span class="person-buttons"><button type="button" name="button" class="button delete-button">⌘</button>
<button type="button" name="button" class="button edit-button">✎</button></span>`;
onePersonArticle.innerHTML = content;
SECOND : 두 가지 코드 injectios에 취약한 경우
const onePersonArticle = create('article');
onePersonArticle.className = 'one-person';
onePersonArticle.innerHTML =
` <label class='info-labels' for="name">NAME: </label><label id='name' class='data-labels'>${member.name}</label>
<label class='info-labels' for="phone">PHONE: </label><label id='phone' class='data-labels'>${member.phone}</label>
<label class='info-labels' for="code-wars">CODEWARS: </label><label id='code-wars' class='data-labels'>${member.cwb} - ${member.cwa}</label>
<label class='info-labels' for="free-code-camp">FREECODECAMP: </label><label id='free-code-camp' class='data-labels'>${member.fccb} - ${member.fcca}</label>
<label class='info-labels' for="notes">NOTES: </label><label id='notes' class='data-labels'>${member.notes}</label>
<span class="person-buttons"><button type="button" name="button" class="button delete-button">⌘</button>
<button type="button" name="button" class="button edit-button">✎</button></span>`;
container.appendChild(onePersonArticle);
지금,에 캐릭터와 같은 방식으로 HTML 태그를 구현하는 anyother 방법이 HTML 페이지?
두 방법을 사용하지 않는 것이 좋습니다. childNodes를 요소로 사용하기 위해 몇 가지 문제가 발생할 것입니다. – danielarend
자세한 내용은 [DOM 기반 XSS 예방 치트 시트] (https://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet)를 참조하십시오. – showdev