태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

cookie sql injection 원리와 대안

┃ Web 2008.10.22 14:47

요즘 쿠키인젝션 화제가 대두되고 있네요
쿠키인젝션에 원리를 간단히 설명드릴까합니다.
아래는 관련 코드입니다.


' InputFilter 함수는 입력값 검증을 위한 필터링 함수
' CheckLogin 함수는 아이디/비밀번호로 로그인 체크

1. 로그인 인증 성공후 쿠키 생성
<%
Dim UserID : UserID = InputFilter(Request.Form("UserID")) ' SQL Injection방어를 위해 InputFilter사용
Dim UserPW : UserPW = InputFilter(Request.Form("UserPW"))
Dim Result : Result = CheckLogin(UserID, UserPW)
If Result = True Then
Response.Cookies("www")("userid") = UserID
Else
Response.Write "인증실패"
End If
%>

2. 게시판 글쓰기하였을때 로그인한 사용자 아이디를 Writer 필드에 저장
<%
Dim Title : Title = InputFilter(Request.Form("Title")) ' SQL Injection방어를 위해 InputFilter사용
Dim Content : Content = InputFilter(Request.Form("Content")) ' SQL Injection방어를 위해 InputFilter사용
Dim Writer : Writer = Request.Cookies("www")("userid") ' 쿠키는 그대로 가져와서 사용 <-- 이부분이 필터링을 해주지 않아 문제가 됨

SQL = "Insert Into Board ("
SQL = SQL & "Title, Content, Writer "
SQL = SQL & ") Values ( "
SQL = SQL & " '" & Title & "', '" & Content & "', '" & Writer & "') "
Db.Execute SQL ' SQL Injection에 취약함!!
%>

개발자 자신들이 만든 쿠키는 안전하다는 생각으로, 생성된 쿠키를 이용하는 필드에서는 sql injection 문을 필터링하지 않는게 문제가 된다고 합니다.
통신 중간에 쿠키를 가로채서 변조하는 것이 가능한 만큼 이 문제가 발생하게 되는 것이죠

역시 생각의 발상이 달라야 한다고 느끼는 산뜻한 기법입니다..(옹호하는게 아님..ㅡㅡ;)

대안으로는 로깅설정에서 쿠키를 설정하거나 웹나이트 같은 웹방화벽에서 쿠키로깅을 설정합니다.
이 설정은 대부분 디폴트가 언체크이기 때문에 관리자가 관심을 가져야 겠습니다.
물론 이 로깅설정에 문제점을 꼬집자면 쿠키를 저장하는 것이기 때문에 cost가 많이 들겠죠
그래서 아예 처음부터 문제발생 요지를 없애는 거죠. 어떠케?


Dim Writer : Writer = InputFileter(Request.Cookies("www")("userid"))

요렇게..

Trackback 0 : Comment 0

Write a comment

◀ PREV : [1] : [2] : [3] : [4] : [5] : [6] : [7] : [8] : [9] : [10] : [···] : [27] : NEXT ▶