버퍼 오버플로우(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) 대비 방법에 대해서 살펴보았습니다.
궁금한점 또는 틀린 부분은 언제든 연락주세요! 👻
반응형
'웹 취약점(Web vulnerability)' 카테고리의 다른 글
6. SSI 인젝션(Server Side Include) (0) | 2021.11.29 |
---|---|
5. SQL 인젝션(OS Command Execution) (0) | 2021.11.29 |
4. 운영체제 명령실행(OS Command Execution) (0) | 2021.11.29 |
3. LDAP 인젝션(Lightweight Directory Access Protocol) (2) | 2021.11.29 |
2. 포멧 스트링(Format String) (0) | 2021.11.29 |
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)
댓글