크로스 사이트 스크립팅 (XSS) - jquery html
Cross-site Scripting (XSS)
설명
크로스 사이트 스크립팅(XSS)은 웹 애플리케이션이 사용자 입력값을 적절히 검증하지 않고 웹 페이지에 반영할 때 발생하는 취약점입니다. jQuery의 html() 함수는 입력된 내용을 HTML로 해석하여 DOM에 삽입하므로, 만약 사용자가 악의적인 스크립트를 입력하면 브라우저에서 그대로 실행될 수 있습니다. 이를 통해 공격자는 피해자의 브라우저에서 악성 코드를 실행하거나, 세션 탈취, 계정 도용, 피싱 등 다양한 공격을 할 수 있습니다.
잠재적 영향
정보 탈취 (개인정보, 세션 쿠키 등): 공격자가 사용자의 세션 쿠키나 민감한 정보를 획득할 수 있습니다.
브라우저 악성코드 실행: 사용자 브라우저에 악성 스크립트를 실행할 수 있습니다.
UI 변조 및 피싱: 정상적인 화면에 피싱 화면을 삽입하여 사용자를 속일 수 있습니다.
해결 방법
jQuery의 html() 함수 대신 text() 함수를 사용해 입력값이 HTML로 해석되지 않도록 합니다.
만약 반드시 HTML을 삽입해야 할 때는, 입력값에 대한 철저한 이스케이프 처리를 합니다. edX의 HtmlUtils.setHtml()과 같이 안전하게 처리하는 라이브러리를 활용하세요.
사용자 입력값은 항상 신뢰하지 말고, 출력 전에 인코딩 또는 필터링을 적용하세요.
취약한 코드 및 안전한 코드 예시
취약한 코드
// XSS 취약 코드 예시
function showMessage(userInput) {
$("#message").html(userInput);
}
// 사용자가 <script>alert('XSS')</script> 를 입력하면 스크립트가 실행됩니다.안전한 코드
설명:
취약한 코드: 사용자 입력값을 html() 함수에 직접 전달하면, 입력에 포함된 스크립트가 실행되어 XSS 공격에 노출됩니다.
안전한 코드: compliant 코드에서는 text() 함수로 사용자 입력을 출력하여 HTML 태그와 스크립트가 해석되지 않도록 하거나, HTML로 삽입할 경우 입력값을 이스케이프 처리하여 악성 스크립트가 동작하지 않도록 막습니다.
참조
Last updated