인프런 커뮤니티 질문&답변

이상민님의 프로필 이미지
이상민

작성한 질문수

스프링 부트 개념과 활용

스프링 웹 MVC 7부: Thymeleaf

Thymeleaf XSS 관련 질문드립니다.

작성

·

1.4K

0

안녕하세요.

우선 기선님의 엄청난 팬입니다 ㅎㅎ

좋은 강의 덕분에 많은 것을 배웠습니다.

다름이 아니라, Thymeleaf에서 자체적으로 XSS Prevention을 지원해주는지 여쭤보고 싶네요..

XSS 테스트를 위해 샘플 프로젝트를 진행하던 중 Thymeleaf를 이용해서 렌더링 시 '<'가 &lt로

'>'가 &gt로 알아서 바뀌어 들어가는 것을 확인했는데요.

이게 Model에서 view로 내릴 때, 스프링 부트가 해주는 것인지 혹은 thymeleaf가 지원해주는 것인지 잘 모르겠네요.. 답변해주시면 감사하겠습니다.

그리고, @RequestBody의 JSON으로 XSS 공격 시 어떠한 방법으로 막아야 할 지 방법도 좀 알려주시면 감사하겠습니다.

답변 3

1

아주 오래된 질문이지만, 지나가다가 답변해옵니다. Thymeleaf th:text의 기본 escaping은 xss방어의 수단으로 쓸 수 있습니다.

JSON으로 떨어질때는 mime type을 javascript가 실행될 수 없는 타입으로 설정하면 스크립트 태그들이 실행되지 않습니다. 대표적으로 json/application 이 있습니다. 따라서 딱히 건들지 않으면 XSS 방어는 기본적으로 적용됩니다.

0

이상민님의 프로필 이미지
이상민
질문자

답변 감사합니다. 많은 도움이 되었습니다.

0

백기선님의 프로필 이미지
백기선
지식공유자

그건 XSS 방지 기능이라기 보단 Thymeleaf의 th:text에서 기본으로 제공하는 escaping 기능이라고 합니다.

https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html 여기서 3.2 항목을 참고해 보세요.

두번째 질문에 대해서는 우선 입력값을 escaping해서 저장할 수도 있고, 아니면 응답으로 내보낼 때 escaping하는 방법이 있겠네요. 저라면 두 경우 모두 특정 문자열들만 escaping 처리하도록 만들고 싶네요. 일부는 정말 태그 그대로 입력 받아야 하는 경우도 있을테니까요. 그러려면.. JSON을 쓰고 계시니까 JacksonJson을 사용한다고 가정하고, ObjectMapper가 사용하는 JsonSerializer를 사용해보면 어떨까 싶네요. 제 REST API 강좌 그걸 사용하는 예제가 나오긴 합니다만 String 타입 변환에 써본적이 없어서 실제로 해봐야 알겠네요.

이상민님의 프로필 이미지
이상민

작성한 질문수

질문하기