티스토리 뷰
Template Injection
코드 삽입 공격은 공격자가 애플리케이션에 임의의 코드를 삽입하여 원래의 의도된 동작을 변경하거나 악의적인 코드를 실행하는 공격으로 애플리케이션 내에서 악성코드 실행, 인증 우회, 권한 상승, 민감 데이터 탈취, 시스템 명령 실행 등 심각한 보안 위협을 가져온다.
가령
이런 입력란에 스크립트 태그를 사용한다면, XSS 공격으로 간단히 악성코드를 실행할수 있을것이다.
대책은 서버단에서 이스케이프 처리를 해주는것이고 타임리프를 사용할때, utext의 무분별한 사용을 지양하면 된다.
XSS (크로스 사이트 스크립팅)
말이 나온김에 XSS도 짚고 넘어가자면, 크로스 사이트 스크립팅의 약자인
XSS는 웹 애플리케이션에서 사용자 입력을 적절히 검증하지 않고 렌더링할 때 발생하는 취약점으로, 공격자가 악성 스크립트를 삽입하여 실행함으로 사용자의 민감정보인 쿠키, 세션, 로그인 정보들을 탈취하는것을 말한다.
이번엔 조금 다른 관점에서 프론트단에서 이스케이프 처리를 했다고 가정해보겠다.
function process(event) {
event.preventDefault(); // 기본 동작 방지
const queryInput = document.getElementId('query');
queryInput.value = sanitizeInput(queryInput.value); // 입력값 이스케이프 처리
event.target.submit();
}
이런 함수로 폼전송을 한다면, 그냥 함수 오버라이드 하던가 전송부 찾아서 그냥 냅다 서버로 요청 보내버리면 된다. 프론트단에서 기본적인 보안 처리해주는것도 중요하지만, 결국은 서버단에서 해주어야 한다.
대책은 위에서 언급한 코드삽입 대책과 동일하며, 추가로 보안 헤더를 추가해주면 좋다. 무엇보다
new Function(), eval(), onclick같은 이벤트함수등에서 함수를 직접 호출하는 경우는 보안 약점이므로 지양할 필요가 있다.
보안 헤더
보안 헤더/속성 | 값 | 설명(XSS 방어) |
Content-Security-Policy (CSP) | script-src ‘self’; style-src ‘self’; img-src ‘self’ | 외부 도메인에서 로드되는 스크립트 차단 |
default-src ‘none’; | 모든 리소스를 차단하여 xss 위험 제거 | |
HttpOnly | HttpOnly | XSS로 인해 javascript에서 쿠키를 탈취하지 못하도록 차단 |
Secure | Secure | Https 연결에서만 쿠키를 전송하여 네트워크 중간의 탈취와 XSS 연계를 방지 |
보안헤더 추가하는 소스(JAVA)
.headers(headers -> headers
.contentSecurityPolicy(csp -> csp
.policyDirectives("script-src 'self'; style-src 'self' 'unsafe-inline'")
)
);
추가한다면 응답헤더를 확인했을때

보안 헤더가 추가됨을 확인 할수 있다.