'공부하자 공부~'에 해당되는 글 19건

  1. 2009.05.27 웹 페이지 오류시 오류 내용 메일로 받기
  2. 2009.05.27 SQL Injection 처리 및 QueryString 값 제한..
  3. 2009.04.17 네이버 오픈 소스 - 스마트 에디터..
  4. 2009.04.03 DB 연결시 DBNMPNTW 메세지 발생시 처리 내용.
  5. 2008.11.24 참고링크
  6. 2008.11.07 SOAP(Simple Object Access Protocol) vs REST(Representational State Transfer)
  7. 2008.11.04 웹 서비스 기초 자료.
  8. 2008.11.04 닷넷 웹서비스에 대하여.
  9. 2008.10.17 SQL Injection 공격 확인 및 메일 발송 스크립트
  10. 2008.10.09 회원 가입시 보안 SSL 적용 페이지에 대한 개선안

웹 페이지 오류시 오류 내용 메일로 받기

목적 : 웹 페이지가 오류가 나면 사용자에게 자세한 내용은 전달하지 않고
         관리자만 보게 하여 보안내용을 감추고 빠른 대처가 가능할 수 있도록 처리하는 내용.

조건 : IIS 서비스 내에 SMTP 서비스가 가동되고 있어야 함.

내용 : IIS5.0 과 6.0 테스트 완료.

설명

기존에 ASP 코드에러가 나는 페이지는 아래와 같이 표시되었슴.

사용자 삽입 이미지

해당 오류가 나면서 테이블 명 또는 DB 접속 정보등이 노출되거나
사용자가 오류에 대한 내용을 잘 인지못해 셋팅을 변경 합니다.

먼저 페이지를 만듭니다.

해당 페이지는 Microsoft 에서 기본 지원하는 페이지를 입맛에 맞게 바꾸고 오류 내용에 대한 것을 메일로 보내도록 수정한 것입니다.

============================ Source 내용  ============================

<%@ language="VBScript" %>
<%
  ' 에러 메시지 출력 페이지
  ' 2009년 5월 25일 작성

  Option Explicit

  Const lngMaxFormBytes = 200

  Dim objASPError, blnErrorWritten, strServername, strServerIP, strRemoteIP
  Dim strMethod, lngPos, datNow, strQueryString, strURL
  Dim errormain

  If Response.Buffer Then
    Response.Clear
    Response.Status = "500 Internal Server Error"
    Response.ContentType = "text/html"
    Response.Expires = 0
  End If

  Set objASPError = Server.GetLastError
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "
http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>이 페이지를 표시할 수 없습니다.</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=ks_c_5601-1987">
<STYLE type="text/css">
  BODY { font: 9pt/12pt 굴림 }
  H1 { font: 13pt/15pt 굴림 }
  H2 { font: 9pt/12pt 굴림 }
  A:link { color: red }
  A:visited { color: maroon }
</STYLE>
<script language="javascript">
  function go_main() {
    try {
      opener.location.href = "/";
    } catch (e) {
      parent.location.href="/";
    }
  }
</script>
</HEAD><BODY><TABLE width=500 border=0 cellspacing=10><TR><TD>
<h1>이 페이지를 표시할 수 없습니다.</h1>
연결하려는 페이지에 문제가 있어 표시할 수 없습니다.
<hr>
<ul>
<li>해당 오류는 관리자에게 메일로 전송 되었습니다.<br><br>
잠시 후에 다시 접속하시거나 메인페이지로 이동 후 재 접속을 부탁 드립니다.</li>
</ul>
<hr>
<ul>
<a href="javascript:history.back();">◀◁ 이전 페이지 이동</a>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<a href="javascript:go_main();">△ 메인 페이지 이동</a>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<a href="javascript:location.reload();">▽ 페이지 다시 읽기</a>
</ul>
<hr>
<%
  errormain = "<META HTTP-EQUIV=""Content-Type"" Content=""text/html; charset=ks_c_5601-1987"">" & chr(13)
  errormain = errormain & "<STYLE type=""text/css"">" & chr(13)
  errormain = errormain & "  BODY { font: 9pt/12pt 굴림 }" & chr(13)
  errormain = errormain & "  H1 { font: 13pt/15pt 굴림 }" & chr(13)
  errormain = errormain & "  H2 { font: 9pt/12pt 굴림 }" & chr(13)
  errormain = errormain & "  A:link { color: red }" & chr(13)
  errormain = errormain & "  A:visited { color: maroon }" & chr(13)
  errormain = errormain & "</STYLE><body style=""font-size:9pt;"">" & chr(13)
  errormain = errormain & "<p>기술 정보(지원 인력용)</p>" & chr(13)
  errormain = errormain & "<ul>" & chr(13)
  errormain = errormain & "<li>오류 유형:<br>" & chr(13)

  Dim bakCodepage
  on error resume next
 bakCodepage = Session.Codepage
 Session.Codepage = 1252
  on error goto 0

  errormain = errormain & Server.HTMLEncode(objASPError.Category)

  If objASPError.ASPCode > "" Then Response.Write Server.HTMLEncode(", " & objASPError.ASPCode)
    errormain = errormain & Server.HTMLEncode(" (0x" & Hex(objASPError.Number) & ")" ) & "<br>"
    If objASPError.ASPDescription > "" Then
      errormain = errormain & Server.HTMLEncode(objASPError.ASPDescription) & "<br>"
    elseIf (objASPError.Description > "") Then
      errormain = errormain & Server.HTMLEncode(objASPError.Description) & "<br>"
  end if

  blnErrorWritten = False
  ' Only show the Source if it is available and the request is from the same machine as IIS
  If objASPError.Source > "" Then
    strServername = LCase(Request.ServerVariables("SERVER_NAME"))
    strServerIP = Request.ServerVariables("LOCAL_ADDR")
    strRemoteIP =  Request.ServerVariables("REMOTE_ADDR")
    If (strServerIP = strRemoteIP) And objASPError.File <> "?" Then
      errormain = errormain & Server.HTMLEncode(objASPError.File)
      If objASPError.Line > 0 Then errormain = errormain & ", line " & objASPError.Line
      If objASPError.Column > 0 Then errormain = errormain & ", column " & objASPError.Column
        errormain = errormain & "<br>"
        errormain = errormain & "<font style=""COLOR:000000; FONT: 8pt/11pt courier new""><b>"
        errormain = errormain & Server.HTMLEncode(objASPError.Source) & "<br>"
      If objASPError.Column > 0 Then errormain = errormain & String((objASPError.Column - 1), "-") & "^<br>"
      errormain = errormain & "</b></font>"
      blnErrorWritten = True
    End If
  End If
  If Not blnErrorWritten And objASPError.File <> "?" Then
    errormain = errormain & "<b>" & Server.HTMLEncode(  objASPError.File)
    If objASPError.Line > 0 Then errormain = errormain &  Server.HTMLEncode(", line " & objASPError.Line)
    If objASPError.Column > 0 Then errormain = errormain & ", column " & objASPError.Column
    errormain = errormain & "</b><br>"
  End If

errormain = errormain & "</li>" & chr(13)
errormain = errormain & "<li>브라우저 종류:<br> " & Server.HTMLEncode(Request.ServerVariables("HTTP_USER_AGENT")) & "<br><br></li>" & chr(13)
errormain = errormain & "<li>페이지:<br>" & chr(13)

  strMethod = Request.ServerVariables("REQUEST_METHOD")
  errormain = errormain & strMethod & " "
  If strMethod = "POST" Then
    errormain = errormain & Request.TotalBytes & " bytes to "
  End If
  errormain = errormain & Request.ServerVariables("SCRIPT_NAME")
  errormain = errormain & "</li>"
  If strMethod = "POST" Then
    errormain = errormain & "<p><li>POST Data:<br>"
    ' On Error in case Request.BinaryRead was executed in the page that triggered the error.
    On Error Resume Next
    If Request.TotalBytes > lngMaxFormBytes Then
      errormain = errormain & Server.HTMLEncode(Left(Request.Form, lngMaxFormBytes)) & " . . ."
    Else
      errormain = errormain & Server.HTMLEncode(Request.Form)
    End If
    On Error Goto 0
    errormain = errormain & "</li>"
  End If

  errormain = errormain & "<br><br></li>"
  errormain = errormain & "<li>시간:<br>"

  datNow = Now()
  errormain = errormain & Server.HTMLEncode(FormatDateTime(datNow, 1) & ", " & FormatDateTime(datNow, 3))
  on error resume next
 Session.Codepage = bakCodepage
  on error goto 0
  errormain = errormain & "<br><br></li>"
  errormain = errormain & "<li>사용자 정보:<br>"

  errormain = errormain & "IP address : " & Request.ServerVariables("REMOTE_ADDR") & "<br>"
  errormain = errormain & "USER ID : " & Session("User_ID") & "<br>"
  errormain = errormain & "URL : " & LCase(Request.ServerVariables("SERVER_NAME")) & Lcase(Request.ServerVariables("URL")) & "<br>"

errormain = errormain & "<br><li>Session Contents : <br>"

Dim key

For Each key in Session.Contents
  errormain = errormain & key & " : " & Session(key) & "<br>"
Next

errormain = errormain & "<br><li>Cookies Value<br>"

For Each key in Request.Cookies
  errormain = errormain & key & " : " & Request.cookies(key) & "<br>"
Next

errormain = errormain & "<br><li>Form Value<br>"

For Each key in Request.Form
  errormain = errormain & key & " : " & Request.Form(key) & "<br>"
Next

errormain = errormain & "<br><li>QueryString Value<br>"

For Each key in Request.QueryString
  errormain = errormain & key & " : " & Request.QueryString(key) & "<br>"
Next

  on error goto 0

errormain = errormain & "<br><br></li>"
errormain = errormain & "</ul>"

If instr(Request.ServerVariables("server_software"),"6.0") > 0 then

  Dim sch, cdoConfig, cdoMessage

  sch = "http://schemas.microsoft.com/cdo/configuration/"

  Set cdoConfig = CreateObject("CDO.Configuration")

  With cdoConfig.Fields
    .Item(sch & "sendusing") = 2               'cdoSendUsingPort 1=내부, 2=외부
    .Item(sch & "smtpserverport") = 25     'SMTP Port
    .Item(sch & "smtpserver") = 수정필요     'Mail Server Address or Domain or "localhost"
    .update
  End With

  Set cdoMessage = CreateObject("CDO.Message")

  With cdoMessage
    Set .Configuration = cdoConfig
        .From = 보내는 이 메일 주소 삽입
                       '보내는이 메일주소
        .To = 받는사람 메일 주소 삽입
                        '받는이 메일주소
        .Subject = LCase(Request.ServerVariables("SERVER_NAME")) & Lcase(Request.ServerVariables("URL")) & " 오류입니다."                   '메일제목
        .HtmlBody = errormain  '메일형식지정 : HtmlBody or TextBody
        .BodyPart.Charset="ks_c_5601-1987"
        .HTMLBodyPart.Charset="ks_c_5601-1987"
        .Send
  End With


  Set cdoMessage = Nothing
  Set cdoConfig = Nothing


Else

  Dim objMail
  Set objMail = Server.CreateObject("CDONTS.NewMail")
    objMail.From      = 보내는 이 메일 주소 삽입                       

    objMail.To       = 받는사람 메일 주소 삽입

    objMail.Subject    = LCase(Request.ServerVariables("SERVER_NAME")) & Lcase(Request.ServerVariables("URL")) & " 오류입니다."
    objMail.Body      = errormain
    objMail.BodyFormat = 0    ' HTML일떄 0, 일반 Text일때 1 으로 설정한다.
    objMail.MailFormat = 0    ' HTML일떄 0, 일반 Text일때 1 으로 설정한다.
    objMail.send               '
  SET objMail = NOTHING

End If

If left(Request.ServerVariables("REMOTE_ADDR"),10) = 특정아이피 대역 then
%><br>
<span style="font-weight:bold;color:red;">아래의 에러 메시지는  내부에서만 확인 가능 합니다.</span>
<%=errormain%>
<% End If %>
</TD></TR></TABLE></BODY></HTML>


오류가 났을때 위의 페이지를 출력하기 위한 IIS 수정

사용자 삽입 이미지


그리고 결과 페이지..

사용자 삽입 이미지


메일을 받으면 이렇게 나온다.

사용자 삽입 이미지

SQL Injection 처리 및 QueryString 값 제한..

목적 : SQL Injection 이 들어오는 QueryString 값을 제한하여 초기대응함과 동시에
         로그인시 필요한 Return URL 을 제외한 모든 QueryString 값의 길이를 구별하여 50자 이상의
         쿼리 스트링은 모두 접근 거부 하고자 함.

조건
        - 아래의 소스는 모든 페이지에 include 형태로 존재하고 있어야 함.
        - Option Explicit 구문 사용시 변수명 중복에 주의 하여야 함.
        - XML 화일이 저장되는 곳의 폴더 권한 설정 필요.
        - 정상 요청도 막는 경우가 있으니 항상 XML 화일 확인하여 정상접근을 해제 해 주어야 함.

추가
        - 아래의 소스는 인터넷 어딘가에서 퍼온 소스를 수정한것이나 원작자를 기억하지 못하고 있습니다.
        - 참고된 소스의 원작자가 보고 계시다면 연락 부탁 드립니다.



====================== 이하 소스 ============================================



' ===========================
' injection 처리
' ===========================

' 변수 선언 ( 타 소스와 중복되지 않게 주의 요망 )
Dim injection_filter, item, inj_qs, injection_filter_arr
Dim injection_filter_cnt, j, get_check, post_check

injection_filter  = "having|syscomments|xp_displayqueuemesgs|xp_printstatements|table|raiserror|xp_dsinfo|xp_peekqueue|--|shutdown|exec|xp_mergelineages|xp_proxiedmetadata|select|kill|xp_|xp_readpkfromqueue|xp_displayparamstmt|insert|declare|sp_|xp_readpkfromvarbin|xp_availablemedia|update|openrowset|xp_cmdshell|xp_repl_encrypt|xp_enumdsn|delete|opendatasource|xp_reg|xp_resetqueue|xp_filelist|drop|pwdencrypt|xp_servicecontrol|xp_sqlinventory|sp_password|alter|msdasql|xp_setsqlsecurity|xp_unpackcab|sp_adduser|create|sqloledb|xp_readerrorlog|xp_sprintf|sp_addextendedproc|inner|join|char(|xp_controlqueueservice|xp_displayparamstmt|sp_dropextendedproc|from|syslogins|xp_createprivatequeue|xp_enumresult|sp_add_job|where|sysxlogins|xp_decodequeuecommand|xp_showcolv|sp_start_job|union|sysdatabases|xp_deleteprivatequeue|xp_updatecolvbm|sp_delete_alert|group|by|sysobjects|xp_deletequeue|xp_execresultset|sp_msrepl_startup|%20and%20|isMember|administrators /add|xp_dirtree|--|2=2|3=3|a=a|b=b|c=c|…|;’|’;"


' 등록된 Injection 코드 발견시 XML 로그 생성할 function
Function objXML_Log(BAD_WORD,QUERY_STRING)

 ' 함수내 변수 선언
 Dim objXML, blnFileExist
 Dim objXMLv
 Dim intID
 Dim xml_file_name

 ' 에러처리
 On Error Resume Next

 Set objXML = server.CreateObject("Microsoft.XMLDOM")
 objXML.async = False

 '-----파일명칭 ( 로그가 쌓일 XML 화일의 경로를 지정 - 보통은 화일 업로드 폴더에 따로 넣어둠 )
 xml_file_name = "/FileHome/injection.xml"

 '-----파일이 존재하는지 체크
 blnFileExist = objXML.load(server.MapPath(xml_file_name))
 If blnFileExist = False Then
  objXML.appendChild(objXML.createProcessingInstruction("xml","version=""1.0"""))
  objXML.appendChild(objXML.createElement("IP_LOGS"))
  intID = 1
 Else
  intID = objXML.documentElement.childNodes(objXML.documentElement.childNodes.length - 1).childNodes(0).text + 1
 End If

 '-----프로세스 시작
 Set objXMLv = objXML.createElement("IP_LOG")

  objXMLv.appendChild(objXML.createElement("ID"))
  objXMLv.appendChild(objXML.createElement("USER_ID"))
  objXMLv.appendChild(objXML.createElement("BAD_WORD"))
  objXMLv.appendChild(objXML.createElement("QUERY_STRING"))
  objXMLv.appendChild(objXML.createElement("HTTP_REFERER"))
  objXMLv.appendChild(objXML.createElement("REMOTE_ADDR"))
  objXMLv.appendChild(objXML.createElement("LOCAL_ADDR"))
  objXMLv.appendChild(objXML.createElement("DATE"))


  objXMLv.childNodes(0).text = intID
  objXMLv.childNodes(1).text = session("USER_ID")
  objXMLv.childNodes(2).text = BAD_WORD
  objXMLv.childNodes(3).text = Request.ServerVariables("SCRIPT_NAME") &"?"& QUERY_STRING
  objXMLv.childNodes(4).text = Request.ServerVariables("HTTP_REFERER")
  objXMLv.childNodes(5).text = Request.ServerVariables("REMOTE_ADDR")
  objXMLv.childNodes(6).text = Request.ServerVariables("LOCAL_ADDR")
  objXMLv.childNodes(7).text = Now()


 '-----파일 저장

  objXML.documentElement.appendChild(objXMLv.cloneNode(True))
  objXML.save(server.MapPath(xml_file_name))

 '-----객체 해제
 Set objXMLv = Nothing
 Set objXML = Nothing

End Function

  ' 실제 Injection 공격이 있는지 확인 하는 Function
  Function f_injection(query_string)

    f_injection = false

    injection_filter_arr = split(injection_filter,"|")
    injection_filter_cnt = Ubound(injection_filter_arr)

      for j = 0 to injection_filter_cnt

        if InStr(1,query_string,injection_filter_arr(j),1) > 0 Then

          f_injection = true

          ' Injection 공격 명령어 리스트에 있는 단어이면 오류 메시지 출력
         Response.Write " (필터링된 문자 : <font color=blue>"& injection_filter_arr(j) &"</font>)<br>"
          Call objXML_Log(injection_filter_arr(j),query_string)
          Response.End

          exit for
        end if
      next

  End function

  'post체크
  For each item in REQUEST.FORM
    For i=1 to REQUEST.FORM(item).Count
      If  REQUEST.FORM(item)(i) <> "" Then
        If f_injection(REQUEST.FORM(item)(i)) = true then
          post_check = true
          exit for
        End if
      End if
    Next
  Next

' QueryString 길이 체크하여 블럭처리
  For Each item in Request.QueryString
    If item <> "redirect_URL" Then
      If len(Request.QueryString(item)) >= 50 Then
        Response.write "전달하는 값의 길이가 너무 길어 공격 시도로 판단되어 처리를 종료합니다."
        response.end
      End If
    End If
  Next

  'QueryString 내용에 Injection 구문 체크
  inj_qs = Request.ServerVariables("QUERY_STRING")

  If inj_qs <> "" Then
    get_check = f_injection(unescape(inj_qs))
  End if

  if post_check = true or get_check = true then
    Response.End
  End if

%>

네이버 오픈 소스 - 스마트 에디터..


네이버에서 제공되는 위지윅 에디터인 스마트 에디터 입니다.

웹상에서만 사용되고 있는 줄알았는데..

이게 오픈소스로 공개 했군요..

상용 사이트에 사용해도 무리가 없을 정도로 퀄리티가 있는 것 같은데..

적용을 해 봐야 겠습니다.


http://dev.naver.com/projects/smarteditor

DB 연결시 DBNMPNTW 메세지 발생시 처리 내용.


접속 명령어 뒤에

Network Library=DBMSSOCN  을 추가.


처음 알았다... -_-;;

참고링크

http://www.hoons.kr/Board.aspx?Name=asptip&Mode=2&BoardIdx=1717&Key=Title&Value=%ed%8e%98%ec%9d%b4%ec%a7%80+%ec%82%bd%ec%9e%85

SOAP(Simple Object Access Protocol) vs REST(Representational State Transfer)

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

웹 서비스 기초 자료.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

닷넷 웹서비스에 대하여.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

SQL Injection 공격 확인 및 메일 발송 스크립트

SQL Injection 공격 방어에 대한 작업을 하던 중..

http://blog.daum.net/_blog/BlogView.do?blogid=0KYRA&articleno=6787162

위의 홈페이지에서 해당 소스를 받아서 SQL Injection 의심사례 발생시 메일로 전달되게 하였습니다.

매번 XML 페이지를 보기도 뭣하고 해서리..

또 다른 방법으로는 XML 파싱 부분을 좀 수정 해서 RSS 구독설정 해 놓는것도 좋은 방법이 될거라 생각 됩니다.




<%


' ===========================
' injection 처리
' ===========================

' SQL Injection 필터 정의 ( www.krcert.or.kr 및 기타 참조 )

injection_filter = ""
injection_filter = injection_filter & "having|syscomments|xp_displayqueuemesgs|xp_printstatements|table|raiserror|xp_dsinfo|xp_peekqueue|--|"
injection_filter = injection_filter & "shutdown|exec|xp_mergelineages|xp_proxiedmetadata|select|kill|xp_|xp_readpkfromqueue|"
injection_filter = injection_filter & "xp_displayparamstmt|insert|declare|sp_|xp_readpkfromvarbin|xp_availablemedia|update|openrowset|"
injection_filter = injection_filter & "xp_cmdshell|xp_repl_encrypt|xp_enumdsn|delete|opendatasource|xp_reg|xp_resetqueue|xp_filelist|"
injection_filter = injection_filter & "drop|pwdencrypt|xp_servicecontrol|xp_sqlinventory|sp_password|alter|msdasql|xp_setsqlsecurity|"
injection_filter = injection_filter & "xp_unpackcab|sp_adduser|create|sqloledb|xp_readerrorlog|xp_sprintf|sp_addextendedproc|inner|join|"
injection_filter = injection_filter & "char(|xp_controlqueueservice|xp_displayparamstmt|sp_dropextendedproc|from|syslogins|"
injection_filter = injection_filter & "xp_createprivatequeue|xp_enumresult|sp_add_job|where|sysxlogins|xp_decodequeuecommand|xp_showcolv|"
injection_filter = injection_filter & "sp_start_job|union|sysdatabases|xp_deleteprivatequeue|xp_updatecolvbm|sp_delete_alert|group|by|"
injection_filter = injection_filter & "sysobjects|xp_deletequeue|xp_execresultset|sp_msrepl_startup|"
injection_filter = injection_filter & "%20and%20|isMember|administrators /add|xp_dirtree|--|2=2|3=3|a=a|b=b|c=c|…|;’|’;"


Function objXML_Log(BAD_WORD,QUERY_STRING)

 '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 'IP,시간등 XML파일로 기록한다.
 '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

 On Error Resume Next

 Set objXML = server.CreateObject("Microsoft.XMLDOM")
 objXML.async = False

 '-----파일명칭- 결과 XML 화일이 저장될 공간을 지정 ( 권한 확인 필요 )
 xml_file_name = "/FileHome/injection.xml"


 '-----파일이 존재하는지 체크
 blnFileExist = objXML.load(server.MapPath(xml_file_name))
 If blnFileExist = False Then
  objXML.appendChild(objXML.createProcessingInstruction("xml","version=""1.0"""))
  objXML.appendChild(objXML.createElement("IP_LOGS"))
  intID = 1
 Else
  intID = objXML.documentElement.childNodes(objXML.documentElement.childNodes.length - 1).childNodes(0).text + 1
 End If

 '-----프로세스 시작
 Set objXMLv = objXML.createElement("IP_LOG")

  objXMLv.appendChild(objXML.createElement("ID"))
  objXMLv.appendChild(objXML.createElement("USER_ID"))
  objXMLv.appendChild(objXML.createElement("BAD_WORD"))
  objXMLv.appendChild(objXML.createElement("QUERY_STRING"))
  objXMLv.appendChild(objXML.createElement("HTTP_REFERER"))
  objXMLv.appendChild(objXML.createElement("REMOTE_ADDR"))
  objXMLv.appendChild(objXML.createElement("LOCAL_ADDR"))
  objXMLv.appendChild(objXML.createElement("DATE"))


  objXMLv.childNodes(0).text = intID
  objXMLv.childNodes(1).text = session("USER_ID")  ' 회원 가입 페이지라면 회원 아이디도 넣을 수 있도록..
  objXMLv.childNodes(2).text = BAD_WORD
  objXMLv.childNodes(3).text = Request.ServerVariables("SCRIPT_NAME") &"?"& QUERY_STRING
  objXMLv.childNodes(4).text = Request.ServerVariables("HTTP_REFERER")
  objXMLv.childNodes(5).text = Request.ServerVariables("REMOTE_ADDR")
  objXMLv.childNodes(6).text = Request.ServerVariables("LOCAL_ADDR")
  objXMLv.childNodes(7).text = Now()


  ' 오류내용을 보고할 메일 본문 작성

  MainCont = ""
  MainCont = MainCont & "<table width=""700"" cellspacing=""0"" cellpadding=""0"" border=""1"" style=""font-size:9pt;"">"
  MainCont = MainCont & "<tr bgcolor=""#FFFFFF""><td height=""26"" width=""200"" align=""center"">번호</td><td width=""500"">&nbsp;"&intID&"</td></tr>"
  MainCont = MainCont & "<tr bgcolor=""#FFFFFF""><td height=""26"" width=""200"" align=""center"">아이디</td><td width=""500"">&nbsp;"&session("USER_ID")&"</td></tr>"
  MainCont = MainCont & "<tr bgcolor=""#FFFFFF""><td height=""26"" width=""200"" align=""center"">금지단어</td><td width=""500"">&nbsp;"&BAD_WORD&"</td></tr>"
  MainCont = MainCont & "<tr bgcolor=""#FFFFFF""><td height=""26"" width=""200"" align=""center"">넘어온 값</td><td width=""500"">&nbsp;"&Request.ServerVariables("SCRIPT_NAME") &"?"& QUERY_STRING
  objXMLv.childNodes(4).text = Request.ServerVariables("HTTP_REFERER")&"</td></tr>"
  MainCont = MainCont & "<tr bgcolor=""#FFFFFF""><td height=""26"" width=""200"" align=""center"">이전 페이지</td><td width=""500"">&nbsp;"&Request.ServerVariables("HTTP_REFERER")&"</td></tr>"
  MainCont = MainCont & "<tr bgcolor=""#FFFFFF""><td height=""26"" width=""200"" align=""center"">클라이언트 아이피</td><td width=""500"">&nbsp;"&Request.ServerVariables("REMOTE_ADDR")&"</td></tr>"
  MainCont = MainCont & "<tr bgcolor=""#FFFFFF""><td height=""26"" width=""200"" align=""center"">서버 아이피</td><td width=""500"">&nbsp;"&Request.ServerVariables("LOCAL_ADDR")&"</td></tr>"
  MainCont = MainCont & "<tr bgcolor=""#FFFFFF""><td height=""26"" width=""200"" align=""center"">날짜</td><td width=""500"">&nbsp;"&Now()&"</td></tr></table>"

' Injection 의심내용 메일로 전달
Call objXML_Email(발신자 메일 주소 임의로 입력,관리자 이메일 주소,"SQL 오류가 발생 되었습니다.",MainCont)



 '-----파일 저장

  objXML.documentElement.appendChild(objXMLv.cloneNode(True))
  objXML.save(server.MapPath(xml_file_name))

 '-----객체 해제
 Set objXMLv = Nothing
 Set objXML = Nothing

End Function

'------ 메일 발송 함수.  SMTP 가 설정되어 있어야 함.
Function objXML_Email(FromMail,ToMail,strTitle,MainCont)

  sch = "http://schemas.microsoft.com/cdo/configuration/"

  Set cdoConfig = CreateObject("CDO.Configuration")

  With cdoConfig.Fields
   .Item(sch & "sendusing") = 1               'cdoSendUsingPort 1=내부, 2=외부
   .Item(sch & "smtpserverport") = 25     'SMTP Port
   .Item(sch & "smtpserver") = "localhost"     'Mail Server Address or Domain or "localhost"
   .update
  End With

  Set cdoMessage = CreateObject("CDO.Message")

  With cdoMessage
    Set .Configuration = cdoConfig
   .From = FromMail                       '보내는이 메일주소
   .To = ToMail                        '받는이 메일주소
   .Subject = strTitle                   '메일제목
   .HtmlBody = MainCont  '메일형식지정 : HtmlBody or TextBody


   .Send
  End With


  Set cdoMessage = Nothing
  Set cdoConfig = Nothing

End Function


Function f_injection(query_string)


      f_injection = false

      injection_filter_arr = split(injection_filter,"|")
      injection_filter_cnt = Ubound(injection_filter_arr)

      for injection_j = 0 to injection_filter_cnt

       if InStr(1,query_string,injection_filter_arr(injection_j),1) > 0 Then

        f_injection = true

          ' 오류 메시지 후 페이지 로딩을 중단 하려면 아래의 주석을 제거 합니다.


'        Response.Write "특수문자 또는 명령어는 서버에 전달할 수 없습니다. (필터링된 문자 : <font color=blue>"& injection_filter_arr(injection_j) &"</font>)<br>"

        Call objXML_Log(injection_filter_arr(injection_j),query_string)

'        Response.End

        exit for
       end if
      next

End function


    'post체크
    For each injection_item in REQUEST.FORM

      For i=1 to REQUEST.FORM(injection_item).Count

  If  REQUEST.FORM(injection_item)(i) <> "" Then
   If f_injection(REQUEST.FORM(injection_item)(i)) = true then
    post_check = true
    exit for
   End if
  End if

      Next

    Next

    'get체크
     inj_qs = Request.ServerVariables("QUERY_STRING")

     If inj_qs <> "" Then
      get_check = f_injection(unescape(inj_qs))
 End if


 if post_check = true or get_check = true then
      Response.End
 End if


 %>

회원 가입시 보안 SSL 적용 페이지에 대한 개선안

회원 가입처리시 보안 처리 내용에 대하여..








prev 1 2 next