2010년 3월 31일 수요일

URL 버퍼오버플로우(?)

 

우리가 웹브라우저 주소창에 사용할 수 있는 주소의 최대 길이는 얼마일까? ATC개발당시는 어디선가 문서를 본것 같은데, 정확하게 찾을 수 없었다. 단지 ATC 내부에 주소를 다루기 위해 1024바이트를 할당하고 있었다. 아마도 1024바이트가 주소창에 넘어갈 수 있는 최대 길이인것 같다.(IE에서 클릭하여 새창을 띄울때 GET방식으로 주소창에 1024바이트이상 주면 새창이 뜨지 않았다)
엊그제 얼마전 사명을 바꾼 G모 업체에서 ATC를 이용해 다중파일 다운로드를 하는데 파일이 30개가 넘어가면 ATC가 오류를 일으킨다는 보고가 들어왔다. 간단하게 테스트해본 결과 문제가 없었고 내가 직접 웹페이지에 접근해서 테스트를 해볼 수 있겠냐고 요청을 했더니 오늘 접근할 수 있도록 주소를 알려주었다. 디버깅 결과 다중 파일 다운로드를 하기 위해 GET방식으로 파일명(또는 어떠한 키값)을 넘겨주는데 그 주소의 길이가 1024바이트가 넘었고, ATC 때문에 IE는 처음으로 보는 에러 메시지를 보이면 실행이 중지 되었다. ㅡㅡv(나만 할 수 있는거얌!~~~)

나름대로 ASSERT도 많이 사용하고 리턴값 체크도 제대로 한다고 생각하는데... 이런 문자열 다루는 부분에서는 더욱 안정적인, 방어적인 코딩을 해야 할 것 같다. 저번 ATC버그도 실질적으로 문자열에 인한 버그라고 할 수 있겠다...
프로그래밍의 길은 정말 끝이 없다...젠장

댓글 없음:

댓글 쓰기