%@Language="VBScript" CODEPAGE="65001" %>
<%
Response.CharSet="utf-8"
Session.codepage="65001"
Response.codepage="65001"
Response.ContentType="text/html;charset=utf-8"
%>
<%
on error resume next
Dim DB,str
set DB=server.CreateObject("ADODB.Connection")
'str = "Provider=SQLOLEDB;" & _
' "Server=(local);" & _
' "Database=ITDAS;" & _
' "Uid=itdas;" & _
' "Pwd=ocus0617$jun;" & _
' "Network Library=DBMSSOCN;"
str = "Provider=SQLOLEDB;" & _
"Server=sql16ssd-005.localnet.kr;" & _
"Database=junsoftdb_s3376;" & _
"Uid=junsoftdb_s3376;" & _
"Pwd=mdol0427;" & _
"Network Library=DBMSSOCN;"
DB.Open str
'CursorType
Const adOpenForwardOnly = 0
Const adOpenKeyset = 1
Const adOpenDynamic = 2
Const adOpenStatic = 3
'LockType
Const adLockReadOnly = 1
Const adLockPessimistic = 2
Const adLockOptimistic = 3
Const adLockBatchOptimistic = 4
'CommandTypeEnum Values
Const adCmdUnspecified = -1 'Does not specify the command type argument.
Const adCmdText = 1 'Evaluates CommandText as a textual definition of a command or stored procedure call.
Const adCmdTable = 2 'Evaluates CommandText as a table name whose columns are all returned by an internally generated SQL query.
Const adCmdStoredProc = 4 'Evaluates CommandText as a stored procedure name.
Const adCmdUnknown = 8 'Default. Indicates that the type of command in the CommandText property is not known.
Const adCmdFile = 256 'Evaluates CommandText as the file name of a persistently stored Recordset. Used with Recordset.Open or Requery only.
Const adCmdTableDirect = 512 'Evaluates CommandText as a table name whose columns are all returned. Used with Recordset.Open or Requery only. To use the Seek method, the Recordset must be opened with adCmdTableDirect. This value cannot be combined with the ExecuteOptionEnum value adAsyncEx
%>
<%
Dim newIP, oldIP
Dim cntIP
Dim strIP
Dim cusMod, cusWeb, cusDate, cusCom, cusErr, cusURL, cusRef
Dim str_qry, rs
'2025.06.03
Dim cusEtc
newIP = Request.ServerVariables("REMOTE_ADDR") '접속 아이피
cusRef = Request.ServerVariables("HTTP_REFERER") '이전페이지: 빈칸이면 직접 입력?
cusWeb = Request.ServerVariables("HTTP_HOST")
cusCom = Request.ServerVariables("REQUEST_METHOD") 'GET, POST 등등
cusErr = ""
cusURL = Request.ServerVariables("QUERY_STRING") 'URL 쿼리 문자열
'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
'2025.06.03 - 일단 서버 53 에서만 적용시켜보자
'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
'404.0: 요청한 리소스가 존재하지 않음. 일반적인 404 에러.
'404.1: 요청한 리소스가 존재하지 않음. 요청된 URL이 잘못되었거나, 파일이 삭제되었거나, 이동되었을 수 있음.
'404.2: 요청한 리소스가 비공개로 설정되어 있어 접근할 수 없음. NTFS 권한 문제일 수 있음.
'404.3: 요청한 MIME 타입이 지원되지 않음. 서버가 요청된 파일의 MIME 타입을 인식하지 못함.
'404.4: 요청한 URL이 잘못된 형식임. URL에 잘못된 문자가 포함되어 있을 수 있음.
'404.5: 요청한 리소스에 대한 접근이 거부됨. 보안 설정이나 인증 문제로 인해 발생할 수 있음.
'404.6: 요청한 리소스가 서버에서 비활성화됨. 특정 모듈이나 핸들러가 비활성화되어 있을 수 있음.
'404.7: 요청한 리소스가 특정 요청 필터링 규칙에 의해 차단됨. IIS의 요청 필터링 설정을 확인해야 함.
'404.8: **"네임스페이스가 숨겨져 있습니다"**라는 의미. 요청된 URL이 숨겨진 디렉터리나 네임스페이스에 접근하려고 할 때 발생.
'404.9: **"파일 속성이 숨겨져 있습니다"**라는 의미. 요청된 파일이 숨겨져 있어 서버가 해당 파일에 대한 접근을 거부할 때 발생.
'404.10: **"요청 헤더가 너무 깁니다"**라는 의미. 클라이언트가 서버에 보낸 요청의 헤더가 서버에서 허용하는 최대 길이를 초과했을 때 발생
'404.11: **"요청에 이중 이스케이프 시퀀스가 포함되어 있습니다"**라는 의미.
'클라이언트가 서버에 보낸 요청이 이중으로 인코딩된 URL을 포함하고 있을 때 발생.
'이중 이스케이프 시퀀스는 보안상의 이유로 서버에서 차단되며,
'이는 일반적으로 공격자가 URL을 조작하여 서버를 우회하려는 시도를 방지하기 위한 조치.
'404.12: **"요청에 상위 비트 문자가 포함되어 있습니다"**라는 의미.
'클라이언트가 서버에 보낸 요청에 ASCII가 아닌 문자가 포함되어 있을 때 발생.
'상위 비트 문자는 일반적으로 비 ASCII 문자로, 서버가 이러한 문자를 허용하지 않도록 설정되어 있을 경우 이 오류가 발생.
'404.13: **"콘텐츠 길이가 너무 깁니다"**라는 의미. 클라이언트가 서버에 보낸 요청의 Content-Length 헤더 값이
'서버에서 허용하는 최대 길이를 초과할 때 발생. 즉, 요청의 본문이 너무 커서 서버가 이를 처리할 수 없다는 것을 나타냅니다.
'404.14: **"요청 URL이 너무 깁니다"**라는 의미. 클라이언트가 서버에 보낸 요청의 URL 길이가 서버에서 허용하는 최대 길이를 초과할 때 발생.
'즉, 요청된 URL이 너무 길어서 서버가 이를 처리할 수 없다는 것을 나타냅니다.
'404.15: **"쿼리 문자열이 너무 깁니다"**라는 의미. 클라이언트가 서버에 보낸 요청의 쿼리 문자열이 서버에서 허용하는 최대 길이를 초과할 때 발생.
'즉, 요청된 쿼리 문자열이 너무 길어서 서버가 이를 처리할 수 없다는 것을 나타냅니다.
'404.16: **"정적 파일 처리기로 전송된 WebDAV 요청"**을 의미.
'클라이언트가 WebDAV(Web-based Distributed Authoring and Versioning) 요청을 보냈지만,
'해당 요청이 정적 파일 처리기로 전송되어 처리되지 않았을 때 발생
'404.17: **"정적 파일 처리기에 매핑된 동적 콘텐츠"**를 의미.
'클라이언트가 요청한 콘텐츠가 동적 스크립트로 인식되지만, 서버의 정적 파일 처리기가 이를 제공할 수 없을 때 발생.
'404.18
'404.19
'404.20: **"URL 세그먼트가 너무 많습니다"**라는 의미.
'클라이언트가 요청한 URL의 세그먼트 수가 서버에서 허용하는 최대 수를 초과했을 때 발생.
'404.21: **"PHP가 설치되지 않았습니다"**라는 의미. 클라이언트가 PHP 스크립트를 요청했지만,
'서버에 PHP가 설치되어 있지 않거나 활성화되어 있지 않을 때 발생.
'(적용) 404.1: 요청한 리소스가 존재하지 않음.
'(적용) 404.4: 요청한 URL이 잘못된 형식임.
'(적용) 404.5: URL 시퀀스가 거부됨 /// 요청필터링 > URL = .git .php /wp- /wp/
'(적용) 404.7: 파일 확장자가 거부됨 /// 요청필터링 > 파일 확장자 = (예) .config .cs .vb .vbproj .webinfo .java ...
'(적용) 404.14: **"요청 URL이 너무 깁니다"**라는 의미.
'(적용) 404.15: **"쿼리 문자열이 너무 깁니다"**라는 의미.
'(적용) 404.18: 쿼리 문자열 시퀀스가 거부됨 /// 요청필터링 > 쿼리 문자열 = 등록된게 없다
'(적용) 404.19: 필터링 규칙에 의해 거부됨 /// 요청필터링 > 규칙 = 등록된게 없다
'(적용) 404.21: **"PHP가 설치되지 않았습니다"**라는 의미.
'(예) 오류페이지에 디테일하게 추가하면 404.5 코드 발생시 이쪽으로 오긴 하는데, 딱히 맞는 항목이 없다...
if instr(cusURL,"404;")>0 then
cusURL = replace(cusURL,"404;","")
cusErr = "404"
cusEtc = "(기본) 요청한 리소스를 서버에서 찾을 수 없음"
end if
'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
oldIP = ""
cntIP = 0
cusMod = "none"
cusDate = Mid(date(),1,10)
if session("oldIP")<>"" then oldIP = session("oldIP") '최초 접속 아니라면
if session("cntIP")<>"" then cntIP = session("cntIP") '최초 접속 아니라면
'response.write "
" & newIP & " : " & session("newIP")
'response.write "
" & oldIP & " : " & session("oldIP")
if oldIP <> "" then
if newIP = oldIP then
cntIP = cntIP + 1
end if
cusMod = "W:404:C" 'Web:404:Counting-Browser
else
str_qry = ""
str_qry = str_qry & "select count(cusIdx) as rIdx from TA_CUS"
str_qry = str_qry & " where cusIP='" & newIP & "'"
str_qry = str_qry & " and cusDate='" & cusDate & "'"
str_qry = str_qry & " and cusWeb='" & cusWeb & "'"
'str_qry = str_qry & " and cusWeb='" & replace(cusWeb,"www.","") & "'"
set rs = server.CreateObject ("adodb.recordset")
rs.Open str_qry, db, adOpenStatic, adLockReadOnly
if rs is nothing or rs.eof then
'최초
cusMod = "P:404:F" 'Pro:404:First - 코딩 변경후 여기로 안온다
else
cntIP = rs("rIdx") + 1
cusMod = "P:404:C" 'Pro:404:Counting
set rs=nothing
end if
end if
session("oldIP") = newIP
session("cntIP") = cntIP
'접속자 IP를 먼저 디비에 넣는다 - 무조건 / 프로그램 롤링 체크 방법 찾자.
strIP = ""
'strIP = strIP & "insert into TA_CUS (cusDate, cusIP, cusMod, cusWeb, cusCom, cusErr, cusUrl, cusRef, cusCnt, cusSvr) values( "
'strIP = strIP & "'" & cusDate & "', '" & newIP & "', '" & cusMod & "', '" & cusWeb & "', '" & cusCom & "', '" & cusErr & "', '" & cusUrl & "', '" & cusRef & "', " & cntIP & ",2)"
'2025.06.03
strIP = strIP & "insert into TA_CUS (cusDate, cusIP, cusMod, cusWeb, cusCom, cusErr, cusUrl, cusRef, cusCnt, cusSvr, cusEtc) values( "
strIP = strIP & "'" & cusDate & "','" & newIP & "','" & cusMod & "','" & cusWeb & "','" & cusCom & "','" & cusErr & "','" & cusUrl & "','" & cusRef & "'," & cntIP & ",2,'" & cusEtc & "')"
db.execute(strIP)
if cntIP > 5 then
'이건 나중에 수작업 해주자... 어떤 액션을 취해야 복수를 하는건지???
End If
'response.write "
" & strIP
'response.write "
" & err.description
%>