2014. 1. 5. 20:59
이전(브라우저가 탭복제가 안되던 시절)에는 토큰방식으로 처리하여도 탭복제 기능이 없었기 때문에 토큰방식이 가능하였으나,
현재는 탭복제 또는 크롬에서 "새 탭에서보기"를 한후 필요한 부분만 편집하여 사용하면 문제없이 글 등록이 된다.

그리하여 현재의 페이지와 입력받는 페이지의 도메인을 비교하면서 동일한 폴더에 있는 파일들인지 체크하여 틀릴경우 CSRF공격을 간주하여 처리한다.

Function Host_Fun(Host)

Host = Replace(Host, "http://", "")

       Host = Replace(Host, "https://", "")

       Host_Fun = Host

End Function

 

 

'' CSRF 방어하기

Sub CSRF_Token

       ' 현재파일의 폴더까지의 위치확인

       InStrLen = InStrRev(Request.ServerVariables("http_host")&Request.ServerVariables("http_url"),"/")

       ' 글을 입력받는 URI 확인(http:// 제외)

       http_referer = Left(Host_Fun(Request.ServerVariables("http_referer")), InStrLen)

' 글을 입력하는 페이지

now_url      = Left(Request.ServerVariables("http_host")&Request.ServerVariables("http_url"), InStrLen)                 

       If (  http_referer <> now_url  ) Then

             Response.Write "<script>"&VbCrLf

             Response.Write "<!--"&VbCrLf

             Response.Write "window.alert('잘못된경로로접근하셨습니다!');"&VbCrLf

             Response.Write "window.history.back();"&VbCrLf

             Response.Write "//-->"&VbCrLf

             Response.Write "</script>"&VbCrLf

             Response.End

       End If

End Sub

 

' 모든페이지 글등록 처리

If InStr(Request.ServerVariables("http_url"), "_ok") > 0 Then

Call CSRF_Token

End If

 

Posted by 팔개