본문 바로가기

카테고리 없음

xss

 

XSS 란?


XSS란 보안이 취약한 웹 사이트에 특정 스크립트를 심어놓고 사용자의 소중한 정보를 뺏어가는 방법입니다.

CSRF(사이트간 요청 위조)는 특정 웹사이트가 사용자의 웹 브라우저를 신용하는 상태를 노린 것이라면

XSS는 사용자가 특정 웹사이트를 신용하는 점을 노린 것입니다.

참으로 어려운 말입니다.

 

실제로 어떻게 탈취를 당하는지, 예시를 살펴보면 조금 더 이해가 편할 것 같습니다.

 

어떻게 정보를 탈취할까??


게시판을 예로 들어보겠습니다.

게시판에 글을 작성할때 html 코드를 입력합니다.

 

그러면 이 입력이 단순히 유저가 입력한 글자로 받아들이는게 아니라

코드로 받아들여서 script 내에 있는 명령어를 실행해 버립니다.

 

옆에 게시글을 완료하고 결과를 확인해볼까요??

 

 

 

 

 

게시판을 입장할 때 alert(5) 가 실행이 되는 것을 확인할 수 있습니다.

 

 

 

 

또한 아래 게시글 목록에는 제목과 글쓴이 항목이 텅텅 비어있는 상태가 되어있는걸 확인할 수 있습니다.

(html 코드를 넣어놓았기 때문에, 글자가 아닌 코드로 이해를 하여 표시를 하지 않고 있습니다.)

 

 

단순히 alert(5)만 실행하였기에 아무 문제도 없었지만, 나의 쿠키, 세션, 귀중한 정보 등을 뽑아가는 코드가 삽입되어 있었다면 어떤일이 발생했을까요??

 

상상만 해도 끔찍합니다.

 

이런것을 방지하려면 어떻게 해야할까요?? 

해결책으로는 문자열 필터링이 일반적인 것으로 보입니다.

 

해결책 적용 방법은 아래 블로그를 참고하였습니다.

https://inseok9068.github.io/springboot/springboot-xss-response/

 

[SpringBoot] XSS Filter Reponse에서 처리하기

오늘은 XSS(Cross-site Scripting) Filter에 대해서 알아보고 그에 따른 해결법에 대해서 포스팅하고자 한다.

inseok9068.github.io

 

build.gradle 추가

implementation 'org.apache.commons:commons-text:1.9'

 

HTMLCharacterEscapes 추가

package com.sparta.week01.util;

import com.fasterxml.jackson.core.SerializableString;
import com.fasterxml.jackson.core.io.CharacterEscapes;
import com.fasterxml.jackson.core.io.SerializedString;
import org.apache.commons.text.StringEscapeUtils;

public class HTMLCharacterEscapes extends CharacterEscapes {

    private final int[] asciiEscapes;

    public HTMLCharacterEscapes() {

        // 1. XSS 방지 처리할 특수 문자 지정
        asciiEscapes = CharacterEscapes.standardAsciiEscapesForJSON();
        asciiEscapes['<'] = CharacterEscapes.ESCAPE_CUSTOM;
        asciiEscapes['>'] = CharacterEscapes.ESCAPE_CUSTOM;
        asciiEscapes['&'] = CharacterEscapes.ESCAPE_CUSTOM;
        asciiEscapes['\"'] = CharacterEscapes.ESCAPE_CUSTOM;
        asciiEscapes['('] = CharacterEscapes.ESCAPE_CUSTOM;
        asciiEscapes[')'] = CharacterEscapes.ESCAPE_CUSTOM;
        asciiEscapes['#'] = CharacterEscapes.ESCAPE_CUSTOM;
        asciiEscapes['\''] = CharacterEscapes.ESCAPE_CUSTOM;
    }

    @Override
    public int[] getEscapeCodesForAscii() {
        return asciiEscapes;
    }

    @Override
    public SerializableString getEscapeSequence(int ch) {
        SerializedString serializedString;
        char charAt = (char) ch;
        if (Character.isHighSurrogate(charAt) || Character.isLowSurrogate(charAt)) {
            StringBuilder sb = new StringBuilder();
            sb.append("\\u");
            sb.append(String.format("%04x", ch));
            serializedString = new SerializedString(sb.toString());
        } else {
            serializedString = new SerializedString(StringEscapeUtils.escapeHtml4(Character.toString(charAt)));
        }
        return serializedString;
    }
}

WebMvcConfig 추가

package com.sparta.week01.util;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Bean
    public MappingJackson2HttpMessageConverter jsonEscapeConverter() {
        // MappingJackson2HttpMessageConverter Default ObjectMapper 설정 및 ObjectMapper Config 설정
        ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json().build();
        objectMapper.getFactory().setCharacterEscapes(new HTMLCharacterEscapes());
        return new MappingJackson2HttpMessageConverter(objectMapper);
    }
}

 

Reference


https://4rgos.tistory.com/1

 

XSS(Cross Site Scripting) 공격이란?

XSS 란? 웹 해킹 공격 중 XSS라는 공격 기법이 있다. Cross Site Scripting의 약자로 CSS라고 하는 것이 맞지만 이미 CSS가 Cascading Style Sheets의 약어로 사용되고 있어 XSS라 한다. XSS는 게시판이나 웹 메일..

4rgos.tistory.com

 

 

https://jojoldu.tistory.com/470

 

Spring Boot에서 JSON API에 XSS Filter 적용하기

일반적인 웹 애플리케이션에서 기본적으로 해야할 보안으로 XSS 방지가 있습니다. 기존에 많이들 알고 계시는 lucy filter의 단점은 이미 오명운 님께서 잘 정리해주셨기 때문에 한번쯤 읽어 보셔

jojoldu.tistory.com

https://k-owl.tistory.com/58

 

XSS(Cross Site Scripting)과 Cheat Sheet

XSS 공격을 성공적으로 수행하기 위해서는 아래의 2가지 조건이 요구 1. 입력 데이터에 대한 충분한 검증 과정이 없어야함 입력한 데이터가 충분한 검증 과정이 이루어지지 않아 악성 스크립트가

k-owl.tistory.com