Today : 2024-10-25 Friday
홈 현재 경제노트 가족은 388,872명 입니다.
당신은 14,355,396번째 방문객 입니다.
경제노트 서가 가족이 쓰는 노트 책밑줄긋기 독서모임
로그인 |
회원가입없이 경제노트를 이메일로 받고 싶으신 분은 이름과 이메일을 입력해 주세요
개인정보 수집및 이용 안내에 동의
(확인하기)
뉴스레터 수정/해지
추천인
이름
메일
추천받는 분
이름
메일
인사말
개인정보 수집및 이용 안내에 동의
(확인하기)
한번에여러명추천하기
IT과학 일반글
2부. ASP 웹 소스 보안 (2/3)
입력 2006-04-10 오전 12:00:00
트위터에 담기 스크랩하기 내모임에담기 이메일추천하기 인쇄하기
2. 파라미터 필터링
1) XSS를 방지하기 위한 필터링

XSS 공격이 무엇인지 간략히 설명하자면 Cross Site Scripting의 약자로 Script 나 Tag 공격을 통해 웹 페이지가 비정상적으로 동작하게 하거나 페이지에 접근하는 유저들의 특정 데이터를 추출해가는 공격을 말한다.

특정 폼의 입력란(Input Box나 TextArea)에 태그와 자바스크립트를 통해 공격문자열을 입력하게 되면, 그 페이지를 로딩했을 때 해당 명령이 실행되게 된다. 예를 들어, <xmp> 라는 HTML 명령어를 입력하였을 때, <> 로 변경하여 저장하지 않았다면, 해당 페이지는 파싱된 HTML이 실행되지 않고 <xmp>가 실행되어 <xmp> 이하의 HTML 코드들을 페이지상에 노출하게 된다. 또한, <script> 문을 작성하여 저장하게 되면 페이지가 로딩될 때마다 해당 스크립트가 실행되어 사용자의 쿠키 값을 해커가 원하는 서버로 전송시킬 수 도 있으며, 해당 페이지를 자유자재로 다른 특정 페이지로 리다이렉트 시키는 등 이외에도 여러 가지 행위를 할 수 있게 된다.

이를 방지하기 위해서는 Tag를 저장할 때, “<”와 “>” 부분을 “&lt;”와 “&gt;”로 변경하여야 한며, 입력폼의 MaxLength 제어, “<script”와 같은 단어의 입력 방지 작업들을 하여야 한다. 그리고, 페이지상에 Request.QueryString 과 같은 Value를 나타내야 하는 경우, URLEncoding과 같은 메소드를 이용하여 값을 인코딩하기 바란다.

2) SQL Injection을 방지하기 위한 필터링

너무나도 유명한 SQL Injection 이다. SQL Injection을 논할 때 마다, 예전에 방안을 마련하기 위해 수없이 테스트 했던 기억이 늘 떠오르곤 한다. SQL Injection 이 무엇인지 간략히 설명하자면, 데이터를 처리하는 과정을 침투하여 의도되지 않은 데이터 핸들링이 잃어나게 하여 데이터를 변조하거나 획득해가는 공격을 말한다. 따라서, SQL Injection 은 주요한 데이터에 대한 공격이기 때문에 절대적으로 방어해야만 하는 아주 중요한 대상이다. 실감나지 않는다면 만약 공격에 의해 테이블을 Drop 했거나 회원 Data를 획득했다고 가정해 보라.

SQL Injection 을 방지하기 위해 ADO를 통한 데이터 핸들링 시 전달되는 파라미터들에 대한 필터링 작업이 필요하게 된다. 이러한 필터링 작업만 완벽히 처리해 준다면 보안이 월등히 높아질 것이다.

파라미터 검증을 위한 함수를 작성할 시에 고려해야 할 사항에 대해 살펴보자.

ⅰ. 데이터 타입 검증 – 데이터는 크게 INT와 Char 형식으로 나뉘게 된다. 따라서, 숫자형의 데이터를 전달해야만 하는 경우 ASP의 IsNumeric 함수를 통해 검증할 수 있다.

ⅱ. 싱글 쿼테이션의 치환 – ADO의 RecordSet 객체를 이용하는 경우 해당 로직에 따라 싱글 퀘테이션을 치환하도록 한다. Ex) ‘ -> ‘’

ⅲ. 문자열 체크 – 문자열이 넘어오는 경우 해당 파라미터의 사이즈에 맞도록 사이즈를 체크하여 불필요한 값이 전달되지 않도록 한다. Left 함수 등을 이용하여 전달되는 데이터의 값을 잘라내는 것도 한 방법이다.

ⅳ. 널 체크 – 반드시 파라미터에 데이터가 전달되어야 하는 경우 널 체크를 통해 값을 인증하도록 한다.

ⅴ. 태그의 허용 - HTML게시판과 같이 태그를 허용하는 경우를 제외하고는 &lt;&gt;로 치환하도록 한다.

이렇게 5가지가 파라미터 검증을 위한 가장 핵심적인 부분이다. 이외에도 해당 로직에 따라 추가적인 파라미터 검증작업이 필요하므로 구현시 보안로직에 대해 잘 고민해야만 한다.

여기서 주의해야 할 사항이 있다. 이렇게 ASP에서 파라미터 검증을 한다고 하여 SQL Injection 이 완벽히 막아지는 건 아니라는 사실이다. 이번 칼럼은 ASP 웹 소스 보안이기 때문에, 이 내용은 ASP 웹 소스상에서 최대한 할 수 있는 방어 기법이라는 것이다. 이를 완벽이 막기 위해서는 데이터베이스 차원에서의 방어까지 이루어 져야 한다. 이 내용은 다음에 이어질 데이터베이스 보안에서 다시 소개하도록 하겠다. 위 내용은 웹 소스상에서 기본적으로 반드시 해줘야 할 작업들에 내한 내용이다.

XSS와 SQL Injection 과 관련하여 간략히 소개하면서 웹 소스상에서 어떠한 작업들을 해줘야 하는지에 대해 설명하였다. 온라인 칼럼 특징상 주요 사항만 작성되었기 때문에 구현하는데 있어 해당 로직을 잘 판단하여 예상되는 공격을 막아내는 작업이 필요하다. 위에서 설명한 내용들을 모두 함수로 작성하고, 개발표준안에 추가하여 모든 스크립트가 항상 보안 로직을 통해 작성되도록 해야 한다.
예병일의경제노트 추천정보
 
공유하기
덧글(0) 스크랩(0) 이 노트 글을...
예병일의경제노트 노트지기 덧글
덧글 달기
덧글달기
이름     비밀번호
엮인글(트랙백) 쓰기 주소 : http://note.econote.co.kr/tb/smartvb/4399    
회의, 골을 넣을 의욕이 있는 사람만 불러라
하인즈가 가공식품 산업을 개척하며 고객을 설득한 방법
노트 목록으로 이동
필자 예병일 소개 경제노트 소개 1:1문의하기 개인정보 취급방침
예병일의 경제노트    대표자: 예병일    개인정보 관리책임자: 조영동 팀장    전화: 02-566-7616   팩스: 02-566-7619