본문 바로가기
블로그 이미지

방문해 주셔서 감사합니다! 항상 행복하세요!

  
   - 문의사항은 메일 또는 댓글로 언제든 연락주세요.
   - "해줘","답 내놔" 같은 질문은 답변드리지 않습니다.
   - 메일주소 : lts06069@naver.com


웹 취약점(Web vulnerability)

1. 버퍼 오버플로우(Buffer Overflow)

야근없는 행복한 삶을 위해 ~
by 마샤와 곰 2021. 11. 29.

 

버퍼 오버플로우(Buffer Overflow)는 정수형 변수 값이 허용되는 범위보다 크거나 작게 대입되어 문제를 일으키는 웹 취약점 중 한가지 입니다.

아래 Java에서 허용하는 숫자(Integer) 값의 범위 입니다.

{
    System.out.println(Integer.MIN_VALUE);  // -2147483648
    System.out.println(Integer.MAX_VALUE);  // 2147483647
}

 

Integer로 파싱을 해야되는 데이터가 허용되는 값 보다 많거나 이하의 값이 나오면 오버플로우(OverFlow) 가 발생하기 때문에 숫자를 대입받는 코드에서는 이러한 부분에 대해서 검증을 해 주어야 합니다.

또한 사용자로부터 배열의 크기를 양수만 받아야 하는 경우인데 음수를 받게되면 음수 크기의 배열은 존재하지 않기 때문에 문제가 발생 할 수 있습니다.

 

 

#방법1

이를 해결하기 위해서는 아주 간단한 방법을 추가해 주면 가능 합니다.

일반적으로 요청받은 파라미터의 형태는 문자(String) 입니다.

문자(String)를 숫자(Integer)로 파싱하여 체크하는 기능을 붙이는 것으로 버퍼 오버플로우를 방지 할 수 있습니다.

아래 샘플코드를 확인하여 주세요.

    {
        String StringNumber = "-2147483648";  //요청받은 값
        
        if( StringNumber != null && StringNumber.length() > 0 ) {  //빈 값, null 여부 확인
            try {
                Integer number = Integer.parseInt(StringNumber);  //래핑
                int targetNumber = number.intValue();  
                if(targetNumber < 0) throw new NumberFormatException(); //음수이면
                System.out.println(targetNumber);  //유효한 값
            } catch (NumberFormatException e) {
                System.out.println(" can not parse int ");  //유효하지 않는 값
            }
        }	
    }

 

누구나 할 수 있는 가장 쉽고 기초적인 코드 방법 입니다.

매핑을 하는 VO객체(value object)에서 숫자를 대입하는 구간(set 메소드)에 위 코드를 넣어주므로써 쉽게 오버플로우 취약점에 대해서 대응이 가능 합니다.

 

 

이상으로 웹 취약점 중 1가지인 버퍼 오버플로우(Buffer Overflow) 대비 방법에 대해서 살펴보았습니다.

궁금한점 또는 틀린 부분은 언제든 연락주세요! 👻

 

반응형
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)

댓글