출력 인코딩 또는 이스케이프 미흡 (Improper Output Encoding or Escaping)
Improper Encoding or Escaping of Output
설명
템플릿 엔진(Mustache 등)에서 'escapeMarkup'을 false로 설정하면, HTML 특수 문자가 자동 이스케이프되지 않아 악의적인 스크립트가 그대로 출력될 수 있습니다. 이로 인해 공격자는 XSS(Cross-Site Scripting) 공격을 수행하여 악성 스크립트를 브라우저에서 실행할 수 있습니다.
잠재적 영향
XSS 공격 가능 (크로스사이트 스크립팅): 공격자가 악의적인 스크립트를 삽입해 사용자의 브라우저에서 실행될 수 있습니다.
정보 탈취: 사용자의 쿠키, 세션 정보 등이 탈취될 수 있습니다.
사이트 변조 또는 서비스 신뢰도 저하: 웹페이지가 공격자에 의해 변조될 수 있습니다.
해결 방법
출력시 항상 이스케이프(escape)를 활성화 상태로 유지합니다.
사용자 입력 데이터는 반드시 HTML 엔코딩 후 출력합니다.
템플릿 엔진의 자동 이스케이프 기능을 비활성화하지 않습니다.
취약한 코드 및 안전한 코드 예시
취약한 코드
// Mustache의 escapeMarkup을 false로 비활성화
const Mustache = require('mustache');
Mustache.escapeMarkup = false;
const unsafeTemplate = '<div>{{userInput}}</div>';
const html = Mustache.render(unsafeTemplate, { userInput: req.query.text });안전한 코드
설명:
취약한 코드: escapeMarkup을 false로 설정하면, 템플릿에 삽입된 사용자 입력값이 HTML로 이스케이프되지 않아 악성 스크립트가 그대로 브라우저에 삽입되고 실행될 수 있습니다.
안전한 코드: escapeMarkup을 비활성화하지 않으면, 사용자 입력값이 HTML 엔티티로 이스케이프되어 XSS 등 악성 코드 실행이 차단됩니다.
참조
Last updated