Search Results for '프로그래밍/Asp'


197 posts related to '프로그래밍/Asp'

  1. 2017/02/26 (ASP버전) 페이팔 연동하기
  2. 2017/02/26 클라우드플레어의 캐시서버 이용시 IP 적용하기 For ASP
  3. 2012/07/23 InStr 과 Mid 테스트
  4. 2012/07/23 InStr 함수로 문자열 찾기
  5. 2012/02/07 이미지캐시 적용되지 않게 하기
  6. 2012/02/07 ASP에서 BASE64를 지원해주는 라이브러리입니다.
  7. 2012/02/07 xmlHTTP를 이용해서 웹페이지 가져오기
  8. 2012/02/07 MSXML2.ServerXMLHTTP 이용해서 웹페이지 읽기
  9. 2012/02/07 특정 html 허용 및 javascript style 등등 완전 제거 함수 [ASP 정규식] 1
  10. 2012/02/07 ASP에서 FTP 사용을 가능하게 해주는 컴포넌트
  11. 2012/01/02 ASP 파일 경로 접근 에러(Path/File access error)
  12. 2012/01/02 ASP 해킹 방지 보안 방법(injection, cross site scripting...)
  13. 2011/11/23 ABCUpload Component 4.1 1
  14. 2011/11/23 컴포넌트를 이용한 블로그 XML RSS 구현
  15. 2011/11/23 홈페이지 자동링크 함수
  16. 2011/11/23 HTML가져오기 1
  17. 2011/11/23 ASP 페이지를 엑셀로 불러올때 숫자를 문자 형태
  18. 2011/11/23 유용한 ASP소스
  19. 2011/11/19 ASP - 드라이브 용량 알아내기
  20. 2011/11/19 ASP - URL Encode 엔코더
  21. 2011/11/19 ASP 파일 목록(리스트) 얻어오기
  22. 2011/11/19 aspuploader가 유료라 찾은 Free ASP Upload입니다. 1
  23. 2011/11/19 [asp] server.urlencode + download
  24. 2011/11/19 ASP에서 글씨를 그림으로 만들기 [ImageMagick 활용]
  25. 2011/11/09 asp용 JSON 라이브러리
  26. 2011/11/09 [ASP] imagemagick 사용법 - 바탕 그림에 글자 쓰기
  27. 2011/10/23 URL에서 특수문자 오류나는 것 처리하기(escape, unescape)
  28. 2011/10/21 ASP용 로그 기록 클래스
  29. 2011/10/21 GeoIP 국가별 IP체크
  30. 2011/10/10 DextUpLoad 를 이용한 WaterMark와 Thumbnail
사용자 삽입 이미지
열어보시면 
cancel.asp
error.asp
multi_pay.asp
notify.asp
pay.asp
이런 파일들이 나오는데, 파일들 열어보시면 이해가 되시리라 봅니다.
약간의 추가설명을 드리자면 단일 상품용이라면 pay.asp를, 여러상품용은 multi_pay.asp를 이용하시면 됩니다.
customer.mdb라는 데이터베이스 파일도 포함되어 있을텐데 multi_pay.asp파일에서 참조합니다.
상품코드로 상품 상세를 가져와서 이용하기 위한 파일이라고 보시면 됩니다.
도움이 되셨길 바랍니다.
 
 
 
<%@ Language=VBScript %>
<%
 
 ' 페이팔 계정 정보
 my_paypal_email = "myemail@mydomain.com"
 
 ' 내 도메인 정보
 return_page = "http://www.mydomain.com"
 notify_page = "http://www.mydomain.com/paypal/notify.asp"
 cancel_page = "http://www.mydomain.com/paypal/cancel.asp"
 
 ' 내 상품 정보
 ' GET방식으로 받는다면 item_price = Request.QueryString("item_price") 이런 식으로
 ' POST방식으로 받는다면 item_price = Request.Form("item_price") 이런 식으로
  item_price = "50"
 item_name = "My Product"
 item_quantity = "1"
 item_cod = "12345"
 currency_type = "USD"
 
 ' 페이팔 페이지 call 부분
 url = "https://www.paypal.com/xclick/"
 url = url & "?business=" & my_paypal_email
 url = url & "&return=" & return_page
 url = url & "&notify_url=" & notify_page
 url = url & "&cancel_return=" & cancel_page
 url = url & "&quantity=" & item_quantity
 url = url & "&item_name=" & replace(item_name," ","%20")
 url = url & "&item_number=" & item_cod
 url = url & "&amount=" & item_price
 url = url & "&no_shipping=1"
 url = url & "&no_note=0"
 url = url & "&currency_code=" & currency_type
 response.redirect url 
%>



2017/02/26 15:26 2017/02/26 15:26
글쎄요... 혹시나 해서요.. 도움이 되시는 분이 한분이라도 계실까 싶어서요... 

클라우드플레어를 사용하는데요 실제 접속자 IP를 가져오고 싶을 경우... 
그런데 ASP일 경우 자료가 없더라구요.. 
물론 클플사이트에 가면 아래와 같은 자료가 있기는 있어요 
관련 파일은 업로드 해봅니다. 

---------------------------------------------------------------- 
IIS Module (third party) 

Installation 

Create a directory for the HTTP Module. Example: 
C:\> md c:\HttpModules 

Copy the files from the Release build of your target platform (x86 for 32-bit or x64 for 64-bit). Example: 
C:\> xcopy <zip_dir>\x64\Release\* c:\HttpModules 

Copy the Install-XFF-ps1 PowerShell script to the target directory. Example: 
C:\> xcopy <zip_dir>\Install-XFF.ps1 c:\HttpModules 

Change directory to the install path 
C:\> cd c:\HttpModules 

Register the Module with the install script (or via IIS admin). 
C:\HttpModules\> .\Install-XFF.ps1 -cmd install -module_path c:\HttpModules\F5XFFHttpModule.dll 

The module should now be installed in your top level IIS server Module settings as well as each existing application. You can selectively add/remove them from the IIS admin at this point. 

Customization for Cloudflare 

The F5 XFF Http Module supports a configuration file named F5XFFHttpModule.ini. It looks in the same directory as the configured .DLL for a file of the same name as it self with the .INI extension. An example file is included but renamed to F5XFFHttpModule.ini.bak. Once you get rid of the ".bak" extension and restart the application the settings will take effect. In this configuration file, you should override the default header name of X-Forwarded-For to CF-Connecting-IP. 
----------------------------------------------------------------------------- 

그래서 요놈을 적용하려고 하다보니... 

아랫놈을 찾게 되어서요.. 굳이 위엣 놈을 삽질하지 않아도 되더라구요... 

----------------------------------------------------------------------------- 

' ###################################################################### 
' Function name : getUserIP 
' Parameter : 
' Return : String 
' Description : 
' ###################################################################### 

<% 

Function getUserIP() 
Dim httpXForwardedFor, remoteAddr 
Dim result 

httpXForwardedFor = Request.ServerVariables("HTTP_X_FORWARDED_FOR") 
remoteAddr = Request.ServerVariables("REMOTE_ADDR") 

If httpXForwardedFor = "" OR InStr(httpXForwardedFor, "unknown") > 0 Then 
result = remoteAddr 
ElseIf InStr(httpXForwardedFor, ",") > 0 Then 
result = Mid(httpXForwardedFor, 1, InStr(httpXForwardedFor, ",")-1) 
ElseIf InStr(httpXForwardedFor, ";") > 0 Then 
result = Mid(httpXForwardedFor, 1, InStr(httpXForwardedFor, ";")-1) 
Else 
result = httpXForwardedFor 
End If 

getUserIP = Trim(Mid(result, 1, 30)) 
End Function 

%> 
--------------------------------------------------------------------------- 
근데 그냥 ... 

Request.ServerVariables("HTTP_X_FORWARDED_FOR") 

요넘을 써도 되더군요.. 

참고 아래 내용 남깁니다. 

---------------------------------------------------------- 

1. Request.ServerVariables("REMOTE_ADDR") 

- 기본 환경변수로 주로 사용 
- 일반적인 아이피 
  

2. Request.ServerVariables("HTTP_CLIENT_IP") 

- 로드밸런싱(L4, L7)을 사용하는 다중웹서버의 경우 사용 

- REMOTE_ADDR값은 로드밸런싱서버 아이피 

  

3. Request.ServerVariables("HTTP_X_FORWARDED_FOR") 

- Proxy를 통해 웹서버에 접근하는 경우 사용 
- REMOTE_ADDR값은 Proxy 아이피 


2017/02/26 00:17 2017/02/26 00:17

<%

a = "test"
b = Instr(a,"t")

Response.Write b '값은 1 이다.

Response.Write "<br>"

c = Mid(a,1,2)
Response.Write c '출력값 te
%>

InStr 로 문자열을 찾는경우,
없으면 0 을 반환하지만, 첫번째에서 찾은 경우는 1 을 반환한다.

일반적으로 객체들이 배열과 마찬가지로 첫번째 인자의 위치가 0 이지만,
InStr 의 경우, 첫번째에서 찾았다고 0 을 반환하면, 찾지 못한경우와 구별이 안되기 때문에 1부터 시작하는듯 하다.

또한, Mid 용법에서도 첫번째는 0 이 아닌 1 부터 시작이어서,
Mid(a,1,2) 하면, 첫번째 문자인 t 부터 시작하여 두개를 가져온다.
따라서 출력값은 te 가 된다.




2012/07/23 14:28 2012/07/23 14:28
<%
str = "search list"
chk = Instr(str,"list")
Response.Write chk
%>

대상 문자열에서 지정한 문자열이 있으면 몇번째에 있는지 숫자를 반환하고, 없으면 0 을 반환한다.
PHP 의 substr 과 같은 역할을 하는 함수.
주의할점은, 대소문자를 구별하므로, 대소문자가 틀릴경우 0 을 반환하며,
대소문자 구별없이 찾으려면 먼저 UCase 또는 LCase 로 변환한후 비교하여야 한다.


2012/07/23 14:27 2012/07/23 14:27
1. meta 태그를 추가
(1)
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="expires" content="wed, 04 jul 1973 16:00:00 gmt">

(2)
<meta http-equiv='Content-type' content='text/html; charset=utf-8'>
<meta http-equiv="cache-control" content="no-cache, must-revalidate">
<meta http-equiv="pragma" content="no-cache">


2. 이미지에 파라미터값을 넣어준다.
<img src="test.asp?t=<%=timer%>" border="0">


이렇게 하면 이미지값이 자동으로 변동되기 때문에 캐시에서 값을 불러오지 않고 새로 불러올 수가 있다.


2012/02/07 10:02 2012/02/07 10:02
Base64 Encoding Library 2.04

Properties:
  • LastCount As Double. Returns the amount of time that the last operation took, in seconds.

Methods:

  • Encode (strDatos As String) As String. Encodes data passed in strDatos and returns the result in a String var.
  • EncodeArr (arrDatos() As Byte) As String. Encodes data passed in the array Datos and returns the result in a String var.
  • EncodeArrArr (arrDatos() As Byte). This method will take data to encode from arrData() and will return the encoded data in the same array. It's the fastest one.
  • EncodeFromFile (strPath As String) As String. Encodes the file specified in strPath and returns the result in a String var.
  • Decode (strDatos As String) As String. Decodes data passed in strDatos and returns the result in a String var.
  • DecodeArr (strDatos As String). Decodes data passed in strDatos and returns the result in an array.
  • DecodeArrArr (arrDatos() As Byte). This method will take data to decode in arrDatos() and will return the decoded data in the same array. It's the fastest one.
  • DecodeToFile (strDatos As String, strPath as String). Decodes data passed in strDatos and saves the result to the file given in strPath. If another file exists with the same name, it will try to overwrite it.

사용방법

1. 레지스트리 등록 (시작->실행->cmd 하신후 프럼프트에서 regsvr32 c:\base64.dll)

2. IIS재시작

* 인코딩
Set objEncode = Server.CreateObject("Base64Lib.Base64")
strEncodeData = objEncode.Encode(strContents)
Set objEncode = Nothing
Response.Write strEncodeData

* 디코딩
Set objDecode = Server.CreateObject("Base64Lib.Base64")
strDecodeData = objDecode.Decode(strContents)
Set objDecode = Nothing
Response.Write strDecodeData

※ 한글지원도 잘 됩니다.
삭제시에는 regsvr32 -u c:\base64.dll 하시면 됩니다.




2012/02/07 10:01 2012/02/07 10:01

<%

' ===========================
' Function to GetHTMLBin
' ===========================
Function GetHTMLBin(URLaddress)
Dim Http
Set Http = CreateObject("Microsoft.XMLHTTP")
Http.Open "GET", URLaddress, False
Http.Send
GetHTMLBin = Http.responseBody
Set Http = Nothing
End Function

' ===========================
' Function to BinToText
' ===========================
Function BinToText(varBinData, intDataSizeInBytes) ' as String
Const adFldLong = &H00000080
Const adVarChar = 200
Set objRS = CreateObject("ADODB.Recordset")
objRS.Fields.Append "txt", adVarChar, intDataSizeInBytes, adFldLong
objRS.Open
objRS.AddNew
objRS.Fields("txt").AppendChunk varBinData
BinToText = objRS("txt").Value
objRS.Close
Set objRS = Nothing
End Function

GetURL = "http://www.naver.com/"

HTMLBin = GetHTMLBin(GetURL)
html = BinToText(HTMLBin,32000)

%>
<%=html%>

ResponseText를 이용하여 값을 받아서 출력하면 한글이 깨지게 됩니다. 그래서 바이너리타입으로 값을 전송하여 변환하는 함수를 이용하여 출력하는 방식입니다.




2012/02/07 10:00 2012/02/07 10:00
가장 기본적인 방법은 다음과 같다.
< %
sUrl = "http://www.youngsam.kr/"
set oHttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
oHttp.Open "GET", sUrl, False
oHttp.Send ""
Response.Write oHttp.ResponseText
Set oHttp = Nothing
%>

GET 메쏘드로 갖고온 HTML을 화면에 출력하는 루틴이다.
게시판등에 글을 쓰거나 할 때는 POST 메쏘드를 사용하는데 이 방법도 가능한다.

<%
sUrl = "http://youngsam.kr/form.asp"
set oHttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
oHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
oHttp.Open "POST", sUrl, False
oHttp.Send "subject=test&contents=message+body"
Response.Write oHttp.ResponseText
Set oHttp = Nothing
%>


오류 처리는 Send 메쏘드를 호출하기 전에 On Error Resume Next를 적어주고 오류발생여부를 체크하면 된다.

<%
sUrl = "http://youngsam.kr/form.asp"
set oHttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
oHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
On Error Resume Next


oHttp.Send "subject=test&contents=message+body"
If Err Then
Response.Write "Error:" & oHttp.ParseError.URL & "<br>" & oHttp.ParseError.Reason
Else
Response.Write oHttp.ResponseText
End If
Set oHttp = Nothing
%>


2012/02/07 09:59 2012/02/07 09:59

사용법

content = StripHTML(content)

Function StripHTML(oSource)

dim Result_Text

Result_text = ReplaceText(oSource," ( )+"," ")

Result_text = Replace(Result_text,"=" & vbcrlf,"")
Result_text = Replace(Result_text,";" & vblrcf,"")

' Remove the header (prepare first by clearing attributes)

' head 태그 안의 모든 내용을 지운다
Result_text = ReplaceText(Result_text,"<( )*head([^>])*>","<head>")
Result_text = ReplaceText(Result_text,"(<( )*(/)( )*head( )*>)","</head>")
Result_text = ReplaceText(Result_text,"(<head>)[\s\S]*(</head>)","")

' remove all scripts (prepare first by clearing attributes)

' script 태그 안의 모든 내용을 지운다
Result_text = ReplaceText(Result_text,"<( )*script([^>])*?>","<script>")
Result_text = ReplaceText(Result_text,"(<( )*(/)( )*?script()*>)","</script>")
Result_text = ReplaceText(Result_text,"(<script>)([^(<script>\.</script>)])*?(</script>)","")
Result_text = ReplaceText(Result_text,"(<script>)[\s\S]*?(</script>)","")

' remove all styles (prepare first by clearing attributes)

' style 태그 안의 모든 내용을 지운다
Result_text = ReplaceText(Result_text,"<( )*style([^>])*?>","<style>")
Result_text = ReplaceText(Result_text,"(<( )*(/)( )*?style( )*>)","</style>")
Result_text = ReplaceText(Result_text,"(<style>)[\s\S]*?(</style>)","")

' remove all object (prepare first by clearing attributes)

' object 태그 안의 모든 내용을 지운다
Result_text = ReplaceText(Result_text,"<( )*object([^>])*?>","<object>")
Result_text = ReplaceText(Result_text,"(<( )*(/)( )*?object( )*>)","</object>")
Result_text = ReplaceText(Result_text,"(<object>)[\s\S]*?(</object>)","")

' Remove the link (prepare first by clearing attributes)

' link 태그 안의 모든 내용을 지운다
Result_text = ReplaceText(Result_text,"<( )*link([^>])*>","<link>")
Result_text = ReplaceText(Result_text,"(<( )*(/)( )*link( )*>)","</link>")
Result_text = ReplaceText(Result_text,"(<link>)[\s\S]*(</link>)","")

' 자바스크립트 함수 치환

Result_text = ReplaceText(Result_text,"onclick=","xonclick=")
Result_text = ReplaceText(Result_text,"onmouseover=","xonmouseover=")
Result_text = ReplaceText(Result_text,"onmouseout=","xonmouseout=")
Result_text = ReplaceText(Result_text,"onchange=","xonchange=")
Result_text = ReplaceText(Result_text,"href=""javascript","href=""xjavascript")

' span 및 div 태그의 속성을 제거

Result_text = ReplaceText(Result_text,"<( )*span([^>])*?>","<span>")
Result_text = ReplaceText(Result_text,"(<( )*(/)( )*?span( )*>)","</span>")

Result_text = ReplaceText(Result_text,"<( )*div([^>])*?>","<div>")
Result_text = ReplaceText(Result_text,"(<( )*(/)( )*?div( )*>)","</div>")

' input 태그를 지운다

Result_text = ReplaceText(Result_text,"<( )*input([^>])*?>","")

' Remove remaining tags like <a>, links, images, comments etc - anything thats enclosed inside < >

' 허용태그 이외의 태그 제거

Result_text = ReplaceText(Result_text,"<[^(image|a|div|span|table|tr|td|li|p)]*?>","")

' Thats it.
StripHTML = Result_Text
End Function

Function ReplaceText(str1, patrn, replStr)
Dim regEx
Set regEx = New RegExp
with regEx
.Pattern = patrn
.IgnoreCase = True
.Global = True
end with
ReplaceText = regEx.Replace(str1, replStr)
End Function




2012/02/07 09:58 2012/02/07 09:58
ASP에서 가끔 FTP를 사용해야할때(자료의 원격지 이동등) 유용하게 사용할 수 있는 컴포넌트입니다.
ASPFTP 라는 이름이며, 압축파일에는 설치법과 예제 , 그리고 dll 파일이 포함되어 있습니다.

컴포넌트는 첨부되어 있는 파일을 사용하면 됩니다.

DLL등록하는 방법은

regsvr32 경로\aspftp.dll

라고

하면 되고요, 경로는 DLL 파일의 경로 입니다

압축을 풀면 나오는 파일의 aps파일의 소스를 참고 하시면 쉽게 사용

가능 합니다.

그래도 잠깐 살펴 본다면..

대충 변수를 설정하고요

Dim objFTP

Dim ftpErrMsg

ftpErrMsg = ""

'객체를 만들어 줍니다

Set objFTP = Server.CreateObject("NIBLACK.ASPFTP")

'인자1 서버이름

'인자2 아이디

'인자3 패스

'인자4 소스파일

'인자5 타겟파일

'인자6 전송형태

'인자7 overWrite

If objFTP.bQPutFile("주소","아뒤","패스워드","경로", "대상",TRANSFER_TYPE_ASCII) Then

ftpErrMsg = ""

Else

ftpErrMsg = "objFTP.sError" '실패시 실패이유가 변수에 저장 됩니다

End If

'이제 객체를 닫아 주고요

Set objFTP = Nothing

if ftpErrMsg = "" then

call 성공시 실행할 함수

else

response.Write "전송실패 : "&ftpErrMsg

end if

머 대충 이렇게 사용하면 됩니다




2012/02/07 09:56 2012/02/07 09:56

제품 : DEXTUpload Pro 분류 : 컴포넌트 일반

[설명]
2.4x 버전과 Professional 3.0에서 DefaultPath프로퍼티 설정시 차이점이 있습니다.
[DEXTUpload 2.4x]
DefaultPath로 지정된 곳은 EveryOne 읽기, 쓰기, 수정 권한이 있어야 합니다. 그러나, 객체 생성후 DefaultPath를 지정 해주지 않으시면 C:\ 를 참조 하게 됩니다. C:\에 EveryOne 권한을 주시거나 또는 DefaultPath를 지정 해주시고 그곳에 권한을 주시면 됩니다.

[DEXTUpload Professional 3.0]
DefaultPath를 지정하지 않으면, 에러를 발생시키고 파일을 업로드 시키지 않습니다.
따라서, 명시적으로 DefaultPath를 지정해야 합니다.
DEXTUpload Professional에서는 DefaultPath를 지정한 폴더가 존재하지 않을시 AutoMakeFolder를 True로 지정함으로써, 자동 폴더 생성을 지원 합니다.

본 문서의 정보는 다음의 제품에 적용됩니다.
DEXTUpload Professional 3.0
DEXTUpload 2.4x
DEXTUpload 2.0x




2012/01/02 02:08 2012/01/02 02:08
<%
'////////////////////////////////////////////////////////////////////
'//가. 명령어 삽입(Command Injection) 가능성
'////////////////////////////////////////////////////////////////////
Dim title, str
title = "What's Up!!! <what happen> Oh my god!!!! & goodness"
str = ""
//변환을 수행할 함수
Sub ReplaceStr(content, byref str)
content = replace(content, "'", """)
content = replace(content, "&", "&")
content = replace(content, "<", "<")
content = replace(content, ">", ">")

str = content
End Sub

ReplaceStr title, str
response.write str

%>

'////////////////////////////////////////////////////////////////////
'//나. 크로스 사이트 스크립팅 (XSS) 가능성
'////////////////////////////////////////////////////////////////////
/include/config.inc.asp
<%
atag = "p,br" 'XSS 허용할 태그 리스트
UploadedPath = "/Uploaded_Files/" '업로드 기본 경로
fileext = "jpg,gif,png,pcx" '허용할 확장자 리스트
%>


/include/secure.inc.asp
<%
'공격 위험성이 존재하는 문자들을 필터링
'문자열 입력값을 검증
'숫자형은 데이터 타입을 별도로 체크하도록 한다.
Function sqlFilter(search)
Dim strSearch(5), strReplace(5), cnt, data

'SQL Injection 특수문자 필터링
'필수 필터링 문자 리스트
strSearch(0)="'"
strSearch(1)=""""
strSearch(2)="\"
strSearch(3)=null
strSearch(4)="#"
strSearch(5)="--"
strSearch(6)=";"

'변환될 필터 문자
strReplace(0)="''"
strReplace(1)=""""""
strReplace(2)="\\"
strReplace(3)="\"&null
strReplace(4)="\#"
strReplace(5)="\--"
strReplace(6)="\;"

data = search
For cnt = 0 to 6 '필터링 인덱스를 배열 크기와 맞춰준다.
data = replace(data, LCASE(strSearch(cnt)), strReplace(cnt))
Next

sqlFilter = data
End Function

'XSS 출력 필터 함수
'XSS 필터 함수
'$str - 필터링할 출력값
'$avatag - 허용할 태그 리스트 예) $avatag = "p,br"
Function clearXSS(strString, avatag)
'XSS 필터링
strString = replace(strString, "<", "<")
strString = replace(strString, "\0", "")

'허용할 태그 변환
avatag = replace(avatag, " ", "") '공백 제거
If (avatag <> "") Then
taglist = split(avatag, ",")

for each p in taglist
strString = replace(strString, "<"&p&" ", "<"&p&" ", 1, -1, 1)
strString = replace(strString, "<"&p&">", "<"&p&">", 1, -1, 1)
strString = replace(strString, "</"&p&" ", "</"&p&" ", 1, -1, 1)
next
End If

clearXSS = strString
End Function

'확장자 검사
'$filename: 파일명
'$avaext: 허용할 확장자 예) $avaext = "jpg,gif,pdf"
'리턴값: true-"ok", false-"error"
Function Check_Ext(filename,avaext)
Dim bad_file, FileStartName, FileEndName

If instr(filename, "\0") Then
Response.Write "허용하지 않는 입력값"
Response.End
End If

'업로드 금지 확장자 체크
bad_file = "asp,html,htm,asa,hta"

filename = Replace(filename, " ", "")
filename = Replace(filename, "%", "")

FileStartName = Left(filename,InstrRev(filename,".")-1)
FileEndName = Mid(filename, InstrRev(filename, ".")+1)

bad_file = split(bad_file, ",")

for each p in bad_file
if instr(FileEndName, p)>0 then
Check_Ext = "error"
Exit Function
end if
next

'허용할 확장자 체크
if avaext <> "" Then
ok_file = split(avaext, ",")

for each p in ok_file
if instr(FileEndName, p)>0 then
Check_Ext = "ok"
Exit Function
End If
next
End If

Check_Ext = "error"
End Function

'다운로드 경로 체크 함수
'$dn_dir - 다운로드 디렉토리 경로(path)
'$fname - 다운로드 파일명
'리턴 - true:파운로드 파일 경로, false: "error"
Function Check_Path(dn_dir, fname)
'디렉토리 구분자를 하나로 통일
dn_dir = Replace(dn_dir, "/", "\")
fname = Replace(fname, "/", "\")

strFile = Server.MapPath(dn_dir) & "\" & fname '서버 절대경로

strFname = Mid(fname,InstrRev(fname,"\")+1) '파일 이름 추출, ..\ 등의 하위 경로 탐색은 제거 됨
Response.Write strFname

strFPath = Server.MapPath(dn_dir) & "\" & strFname '웹서버의 파일 다운로드 절대 경로

If strFPath = strFile Then
Check_Path = strFile '정상일 경우 파일 경로 리턴
Else
Check_Path = "error"
End If
End Function

'IP 체크 함수
Function Check_IP(IP_Addr)
If Request.Servervariables("REMOTE_ADDR") = IP_Addr Then
Check_IP = "TRUE"
Else
Check_IP = "FALSE"
End If
End Function
%>



/head.asp
<%
'페이지에서 에러가 발생하여도 페이지 오류를 외부로 출력하지 않기위해 사용
On Error Resume Next
'On Error GoTo 0도 가능하나 2003에서는 실행되지 않음
if err.number <> 0 then
'Response.Write err.description & "<BR>" & err.source & "<BR>"
err.clear
End if
%>


/content.asp
<!--#include virtual="/include/connection.inc.asp"--> <% 'DB연결 헤더 %>
<!--#include virtual="/include/secure.inc.asp"--> <% '보안관련라이브러리 %>
<!--#include virtual="/include/config.inc.asp"--> <% '전역변수리스트 %>
<!--#include virtual="/head.asp"--> <% '초기 설정 페이지(에러 메세지 미출력) %>
<%
Dim strSQL
Dim intSeq, strName, strEmail, strSubject, strContent, intCount, dtmReg_Date, intExist
Dim blnTag, strUserIP
Dim atag

'입력값이 숫자형인 경우 IsNumeric 함수를 사용한다.
If IsNumeric(seq) Then
intSeq = Request.QueryString("seq")
Else
Response.Write "허용하지 않는 입력값입니다."
Reponse.End
End If

'문자(열)인 경우 sqlfilter 사용
'intSeq = sqlFilter(Request.QueryString("seq")) 'SQL Injection 필터링

'읽은 횟수 검색
strSQL = "SELECT count(*) FROM board WHERE intSeq='" & intSeq & "'"

objRs.Open strSQL, objDBConn

intExist = objRs(0)
objRs.Close

If intExist <> 1 Then
Response.Write "해당글이 없습니다."
Else
'읽은 횟수 증가
strSQL = "UPDATE board SET intCount=intCount+1 WHERE intSeq='" & intSeq & "'"
objRs.Open strSQL, objDBConn

'게시물 SELECTZ
strSQL = "SELECT strName,strEmail,strSubject,strContent,intCount,strUserIP,blnTag,dtmReg_Date FROM board WHERE intSeq='" & intSeq & "'"
objRs.Open strSQL, objDBConn

strName = objRs(0)
strEmail = objRs(1)
strSubject = objRs(2)
strContent = objRs(3)
intCount = objRs(4)
strUserIP = objRs(5)
blnTag = objRs(6)
dtmReg_Date = objRs(7)

objRs.Close
Set objRs = Nothing

objDBConn.Close
Set objDBConn = Nothing

'게시물 출력값에 XSS 필터링
'사용자가 입력하는 출력되는 값은 strName, strEmail, strSubject, strContent으로 이 부분은 XSS 공격이 가능한 부분들이다.
'일반적으로 본문만 선택적으로 HTML 태그 사용을 허용하며 나머지 부분들은 사용할 수 없도록 하는것이 바람직하다.
strName = clearXSS(strName, atag)
strEmail = clearXSS(strEmail, atag)
strSubject = clearXSS(strSubject, atag)
strContent = clearXSS(strContent, atag)

'줄넘김 처리
strContent = replace(strContent, vbLf, vbLf & "<br>")
%>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=ks_c_5601-1987">
<title>내용보기</title>
</head>

<body>
<div align=center>
<table border=1>
<tr>
<td>이름</td>
<td><%=strName%></td>
<td>등록일</td>
<td><%=dtmReg_Date%></td>
</tr>
<tr>
<td>이메일</td>
<td><%=strEmail%></td>
<td>조회</td>
<td><%=intCount%></td>
</tr>
<tr>
<td>제목</td>
<td colspan=3><%=strSubject%></td>
</tr>
<tr>
<td>내용</td>
<td colspan=3><%=strContent%></td>
</tr>
<tr>
<td colspan=4>
<a href="list.asp">목록으로</a> <a href="edit.asp?seq=<%=intSeq%>">수정하기</a> <a href="delete.asp?seq=<%=intSeq%>">삭제하기</a>
</td>
</tr>
</table>

</div>
</body>
</html>
<%
End If
%>



'////////////////////////////////////////////////////////////////////
'//다. SQL 구문 삽입 가능성
'////////////////////////////////////////////////////////////////////
SQL Injection은 쿼리문의 잘못 해석함에서 발생하는 문제이다. 이를 해결하기 위해서는 쿼리문을 생성시에 입력된 값에 대한 유효성 검사를 수행하면 된다. ‘, “ 문자를 \’, \”로 변경해 주거나 아예 공백으로 처리하는 방법이다.

삭제해야 할 프로시저
xp_cmdshell
xp_stratmail
xp_sendmail
xp_grantlogin
xp_makewebtask


'////////////////////////////////////////////////////////////////////
'//사. 다운로드 취약성
'////////////////////////////////////////////////////////////////////
<!--#include virtual="/include/connection.inc.asp"--> <% 'DB연결 헤더 %>
<!--#include virtual="/include/secure.inc.asp"--> <% '보안관련라이브러리 %>
<!--#include virtual="/include/config.inc.asp"--> <% '전역변수리스트 %>
<!--#include virtual="/head.asp"--> <% '초기 설정 페이지(에러 메세지 미출력) %>
<%
Dim dn_dir, fname, val_ok
Dim UploadedPath

dn_dir = Request("dir")
fname = Request("fname") '파일 이름

' IE 5.01에서는 이 방식을 사용할때 메모리 관련 문제가 발생할 수 있다.
strUA = Request.ServerVariables("HTTP_USER_AGENT")
If Instr(strUA, "MSIE") Then
intVersion = CDbl(mid(strUA, Instr(strUA, "MSIE")+5, 3))

If intVersion < 5.01 Then
Response.Write "error"
End If
End If

if fname = "" Then
Response.Write "<script language=javascript>"
Response.Write "alert(""파일명을 입력해 주세요"");"
Response.Write "history.back();"
Response.Write "</script>"
End If

dn_dir = UploadedPath & dn_dir
val_ok = Check_Path(dn_dir, fname)

If val_ok <> "error" Then '사용자가 다운 받는 파일과 웹서버의 파일 다운로드 경로가 맞는지 비교
Set objStream = Server.CreateObject("ADODB.Stream") 'Stream 이용

Response.ContentType = "application/unknown" 'ContentType 선언
Response.AddHeader "Content-Disposition","attachment; filename=" & fname

objStream.Open
objStream.Type = 1
objStream.LoadFromFile val_ok

download = objStream.Read
Response.BinaryWrite download
End If

Set objstream = nothing '객체 초기화
%>


2012/01/02 02:04 2012/01/02 02:04
최신 버전이 있긴 하지만. 최신 버전은 30일 날짜 제한이 있어서..
4.1을 올렸음.



2011/11/23 19:32 2011/11/23 19:32
꼭 블로그가 아니더라도 XML RSS 는 이제 어느정도 대세가 되어가고 있는 듯합니다. 이제는 언론사나 커뮤니티 등에서도 RSS 가 나옵니다.. 그리고 #Reader나 Xpyder,FreeDemon 등의 RSS 구독기 또한 점차 넓게 사용되고 있습니다. 여기서는 이러한 XML RSS 를 구현하는 방법을 ASP 기반에서 XML 컴포넌트를 이용하여 구현하고자 합니다.

사실 RSS 를 구현할때 사실 단순히 텍스트 파일로 뿌려주고 ContentType 만 xml 로 선언해줘도 가능합니다. 그러나 조금은 다르게 해보고 싶다는 저의 호기심도 있고, 확장성과 향후 유지보수에 조금이라도 더 손쉽게 하기위해서 윈도우즈 2000 에 기본제공되어 있는 XML 관련 컴포넌트를 이용하여 구현해보았습니다. 물론 아래 소스는 지금 제 블로그 RSS 의 원형이 되고 있습니다.

한가지 주의 하실점은 XML 선언전에 어떠한 개행(\n) 이나 문자가 들어가서는 안됩니다. PHP 에서의 쿠키과 마찬가지 입니다.

<?xml version="1.0" encoding="EUC-KR" ?>
<%
Response.ContentType = "text/xml"
Set xmlPars = Server.CreateObject("Msxml2.DOMDocument")

' 여기서 부터 rss 정보를 담는다.
Set rss = xmlPars.CreateElement("rss")
rss.setAttribute "version", "2.0"
rss.setAttribute "xmlns:dc", "http://purl.org/dc/elements/1.1/"
rss.setAttribute "xmlns:sy", "http://purl.org/rss/1.0/modules/syndication/"
rss.setAttribute "xmlns:admin", "http://webns.net/mvcb/"
rss.setAttribute "xmlns:rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlPars.AppendChild(rss)

'<channel> 시작

Set Channel = xmlPars.CreateElement("channel")
rss.AppendChild(Channel)

'<title>정보
Set title = xmlPars.CreateElement("title")
Channel.AppendChild(title)
Channel.childnodes(0).text = "블로그 제목"

'<link>정보
Set channel_link = xmlPars.CreateElement("link")
Channel.AppendChild(channel_link)
Channel.childnodes(1).text = "블로그 주소"

'<description>정보
Set description = xmlPars.CreateElement("description")
Channel.AppendChild(description)
Channel.childnodes(2).text = "블로그 설명"

'<dc:language>정보
Set language = xmlPars.CreateElement("dc:language")
Channel.AppendChild(language)
Channel.childnodes(3).text = "ko"

'<image>정보
Set image = xmlPars.CreateElement("image")
Channel.AppendChild(image)

'이미지 정보에 들어갈 것들
set i_title = xmlPars.CreateElement("title")
set i_url = xmlPars.CreateElement("url")
set i_width = xmlPars.CreateElement("width")
set i_height = xmlPars.CreateElement("height")

image.AppendChild(i_title)
image.AppendChild(i_url)
image.AppendChild(i_width)
image.AppendChild(i_height)

image.childnodes(0).text = "이미지 제목"
image.childnodes(1).text = "이미지 경로"
image.childnodes(2).text = "이미지 가로 사이즈"
image.childnodes(3).text = "이미지 세로 사이즈"

' 여기서 부터는 포스트에 대해서 출력

' 우선 데이터를 읽어오자
SQL = "해당되는 포스트에 대한 쿼리문"
set rs = Server.CreateObject("ADODB.Recordset")
rs.Open SQL,접근문자열,adOpenForwardOnly,adLockPessimistic,adCmdText

' 여기서 부터 루프를 돌리자.
Do until rs.EOF

'<item> 이라는 노드를 추가
Set item = xmlPars.CreateElement("item")
Channel.AppendChild(item)

' 여기서부터 해당 포스트의 세부 정보를 출력
set title = xmlPars.CreateElement("title") '
set link = xmlPars.CreateElement("link")
set description = xmlPars.CreateElement("description")
set dcdate = xmlPars.CreateElement("dc:date")
set dcsubject = xmlPars.CreateElement("dc:subject")

item.AppendChild(title)
item.AppendChild(link)
item.AppendChild(description)
item.AppendChild(dcdate)
item.AppendChild(dcsubject)

item.childnodes(0).text = rs("제목필드")
item.childnodes(1).text = rs("포스트 고유 url 필드")
item.childnodes(2).text = rs("내용 필드")
item.childnodes(3).text = rs("날짜")
item.childnodes(4).text = rs("포스트의 분류")

rs.movenext
loop

' 마지막으로 최종적으로 뿌려주자.
Response.Write xmlPars.xml

'마무리 ^^;

rs.close

set rs = nothing

Set xmlPars = nothing
%>




2011/11/23 18:42 2011/11/23 18:42
<%

Function RegExpContent(str)

Dim ptrn, repstr

ptrn = "((http|https|ftp|telnet|news):\/\/[a-z0-9-]+\.[][a-zA-Z0-9:&#@=_~%;\?\/

\.\+-]+)"

repstr = "<a href=""$1"" target=""_blank"">$1</a>"

RegExpContent = ReplaceEreg(ptrn, repstr, str)

End Function

Function ReplaceEreg(ptrn, repstr, str)

Dim regEx

Set regEx = New RegExp

regEx.Pattern = ptrn

regEx.IgnoreCase = True

regEx.Global = True

ReplaceEreg = regEx.Replace(str, repstr)

End Function

content = "다음은 asprun 홈페이지 주소이다. http://www.naver.com/ 기억해주세요"

content = RegExpContent(content)

content = "<pre>"& content &"</pre>"

response.write content

%>




2011/11/23 18:41 2011/11/23 18:41

<%
' ===========================
' Function to GetHTMLBin
' ===========================
Function GetHTMLBin(URLaddress)

Dim Http

Set Http = CreateObject("Microsoft.XMLHTTP")
Http.Open "GET", URLaddress, False
Http.Send
GetHTMLBin = Http.responseBody
Set Http = Nothing
End Function

' ===========================
' Function to BinToText
' ===========================
Function BinToText(varBinData, intDataSizeInBytes) ' as String

Const adFldLong = &H00000080
Const adVarChar = 200

Set objRS = CreateObject("ADODB.Recordset")
objRS.Fields.Append "txt", adVarChar, intDataSizeInBytes, adFldLong
objRS.Open
objRS.AddNew
objRS.Fields("txt").AppendChunk varBinData
BinToText = objRS("txt").Value
objRS.Close
Set objRS = Nothing

End Function

GetURL = trim(cizleUrl)&"?CHNL_ID="&trim(CHNL_ID)&"&CHNL_PWD="&trim(CHNL_PWD)&"&CHNL_CD="&trim(CHNL_CD)&"&USER_ID="&chk_id
HTMLBin = GetHTMLBin(GetURL)
html = BinToText(HTMLBin,32000)

Response.write html & "<BR>"
%>




2011/11/23 18:41 2011/11/23 18:41
ASP 페이지를 엑셀로 불러올때 숫자를 문자 형태

mso-number-format:\@

mso-number-format:"0\.000"

mso-number-format:\#\,\#\#0\.000

mso-number-format:"mm\/dd\/yy"

mso-number-format:"d\\-mmm\\-yyyy"

mso-number-format:Percent

ex)

CSS style sheet:

td.accountnum

{mso-number-format:\@}

<td class="accountnum">01070000<td>




2011/11/23 18:40 2011/11/23 18:40

'===================================================================
'== 설명 : 문장을 해당 자릿수만큼 <br>이 들어간 문장으로 변환
'== 이름 : MakeBr(Str,Pos)
'== 변수 : Str(String),Pos(Int)
'== 반환 : String
'===================================================================
Function MakeBr(Str,Pos)

Dim StrLen, TmpStr, i, Midcnt, Start, Surplus

StrLen = len(Str)

If (StrLen Mod Pos) = 0 then
MidCnt = Fix(StrLen/Pos)
Else
MidCnt = Fix(StrLen/Pos) + 1
End If

for i = 1 to MidCnt
if i = 1 then
TmpStr = TmpStr&Mid(Str,i,pos)&"<br>"
Else
TmpStr = TmpStr&Mid(Str,((i-1)*Pos)+1,pos)&"<br>"
End If
next

MakeBr = TmpStr
End Function

' ##################################################################################
' 검색에서 selected
' ##################################################################################
Function getSelected(search,t)
if search = t then
getSelected ="selected"
end if
End function

' ##################################################################################
' checked
' ##################################################################################
Function getChecked(tag,y)
If tag = y then
getChecked = "checked"
End if
End function

' ##################################################################################
' 자동링크
' ##################################################################################

FUNCTION autolink(CONTENT)

DIm Re
Set re = New RegExp

' First Pass for http
re.Pattern = "(\w+):\/\/([^/:]+)(:\d*\b)?([^# \n<]*).*\n"
re.Pattern = "http://([0-9a-zA-Z./@:~?&=_-]+)"
re.Global = True
re.IgnoreCase = True

' ASP seems to be not supporting .MultiLine method.
're.MultiLine = True

CONTENT = re.Replace(CONTENT,"<a target=_blank href='http://$1'>http://$1</a>")

' Second Pass for mail
re.Pattern = "([_0-9a-zA-Z-]+(\.[_0-9a-zA-Z-]+)*)@([0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*)"
autolink = re.Replace(CONTENT,"<a href='mailto:$1@$3'>$1@$3</a>")

END FUNCTION

' ##################################################################################
' 문자열 체크 (리턴값:boolean)
' ##################################################################################
Function chkStrFlag(Val, chkStr)
Dim flag, MyPos

If Val = "" then
flag = false
Else
Mypos =Instr(Val,chkStr)
If MyPos = 0 then
flag=false
Else
flag=true
End If
End If

chkStrFlag = flag
End Function

'##################################################################################
' 문자열 체크 (공백이나 NULL값 체크)
' Val : 체크 값, r_Val (대체값)
'##################################################################################
Function replaceVal(val, r_Val)
Dim flag, MyPos

If (val = "") or IsNull(Val) then
replaceVal = r_Val
Else
replaceVal = val
End If
End Function

'##################################################################################
' 숫자값 자릿수만큼 문자로 변경 (공백이나 NULL값 체크)
' Val : 체크 값, chkLen 자릿수 , r_Val(대체값)
'##################################################################################
Function chkLenReplaceVal(val,chkLen, r_Val)
Dim chkCnt, MyPos
chkCnt = len(Cstr(val))

If chkCnt < chkLen then
chkLenReplaceVal = val

for i = 1 to (chkLen-chkCnt)
chkLenReplaceVal = r_Val&chkLenReplaceVal
next
Else
chkLenReplaceVal = val
End If

End Function

'##################################################################################
' 널값,""값 확인
' Val : 체크 값
' retun 값 : true, false
'##################################################################################
Function chkBlank(val)
If (val = "") or IsNull(Val) then
chkBlank = true
Else
chkBlank = false
End If
End Function

'##################################################################################
' 비교값 리턴
' Val : 체크 값
' retun 값 : true, false 또는 대치 문장
'##################################################################################
Function replaceStr(str, chkStr, replaceStr1, replaceStr2)
If str = chkStr then
replaceStr = replaceStr1
Else
replaceStr = replaceStr2
End If
End Function

'##################################################################################
' NULL값 만들기
' Val : 값
' retun 값 : NULL, 문장
'##################################################################################

Function makeNull(str)
If str="" or IsNull(str) then
makeNull = "NULL"
Else
makeNull = str
End IF
End Function

'##################################################################################
' HTML 태그 지우기 (정규식표현)
' 인자 : strHTML:문장, patrn : 패턴 문장
' retun 값 : String
'##################################################################################

Function stripHTML(strHTML, patrn)
Dim objRegExp, strOutput
Set objRegExp = New Regexp

objRegExp.IgnoreCase = True
objRegExp.Global = True
objRegExp.Pattern = patrn

'objRegExp.Pattern = "<.+?>" '' 태그완전히없앰

strOutput = objRegExp.Replace(strHTML, "")

stripHTML = strOutput

Set objRegExp = Nothing
End Function

'##################################################################################
' 문자 잘라내기
'##################################################################################
Function CutString(Str,Length,Patten)
If Len(Str) > Length Then
CutString = Left(Str,Length-3) & patten
Else
CutString = Str
End If
End Function

별건 아니구요..그냥 가끔 디버깅시에 쓰는 함수에요
####################################################
Sub DbPrintErrMsg(obj)

Dim errLoop
For Each errLoop In obj.Errors
response.write "#############<br>"
response.write "Error Number: " & errLoop.Number & "<br>"
response.write "Description: " & errLoop.Description & "<br>"
response.write "Source: " & errLoop.Source & "<br>"
response.write "SQL State: " & errLoop.SQLState & "<br>"
response.write "Native Error: " & errLoop.NativeError & "<br>"
response.write "#############<br>"
Next
End Sub

########폼값 확인할때###################
Sub Prt_RequestForm(obj)

Dim item
For Each item In obj
response.write "#############<br>"
response.write item&" : " &obj(item)& "<br>"
response.write "#############<br>"
Next
End Sub
ex) Prt_RequestForm(Request.Form), Prt_RequestForm(Request.QueryString),
Prt_RequestForm(UploadForm)

첨부파일이 없습니다.



2011/11/23 18:40 2011/11/23 18:40

<%
Set fs = Server.CreateObject("Scripting.FileSystemObject")
Set c_drive = fs.GetDrive("c:")
Set g_drive = fs.GetDrive("g:")
Set h_drive = fs.GetDrive("h:")

Dim cmax, gmax, hmax
Dim c, g, h
Dim cper, gper, hper
Dim cfmt, gfmt, hfmt
Dim gbyte
gbyte = 1024*1024*1024

' C, G, H 드라이브 총 용량
cmax = CInt(c_drive.TotalSize / gbyte)
gmax = CInt(g_drive.TotalSize / gbyte)
hmax = CInt(h_drive.TotalSize / gbyte)

' C, G, H 드라이브 남은 용량
c = CInt(c_drive.FreeSpace / gbyte)
g = CInt(g_drive.FreeSpace / gbyte)
h = CInt(h_drive.FreeSpace / gbyte)

'남은 비율 계산
div100 = cmax / 100
cper = CInt(c / div100)
div100 = gmax / 100
gper = CInt(g / div100)
div100 = hmax / 100
hper = CInt(h / div100)

'NTFS, FAT, FAT32등 드라이브 포멧형식
cfmt = c_drive.FileSystem
gfmt = g_drive.FileSystem
hfmt = h_drive.FileSystem

%>
<html>
<head>
<title> 하드 드라이브 용량 알아내기 </title>
</head>

<body style="font-size:9pt;">
<h1>하드 드라이브 용량 체크 예제</h1><p>

<b>C: 드라이브의 용량<b> : <%=cmax%> / <%=c%> GB [남은 비율:<%=cper%>%] 형식:<%=cfmt%><br>
<table border="0" height="50" style="font-size:9pt;" cellspacing="0">
<tr>
<td align="center" bgcolor="#FF0000" width="<%=600-(cper*6)%>">사용 용량(<%=cmax%>GB)</td>
<td align="center" bgcolor="#00FF00" width="<%=cper*6%>">사용 가능 용량(<%=c%>GB)</td>
</tr>
</table>
<p>
<b>G: 드라이브의 용량<b> : <%=gmax%> / <%=g%> GB [남은 비율:<%=gper%>%] 형식:<%=gfmt%><br>
<table border="0" height="50" style="font-size:9pt;" cellspacing="0">
<tr>
<td align="center" bgcolor="#FF0000" width="<%=600-(gper*6)%>">사용 용량(<%=gmax%>GB)</td>
<td align="center" bgcolor="#00FF00" width="<%=gper*6%>">사용 가능 용량(<%=g%>GB)</td>
</tr>
</table>
<p>
<b>H: 드라이브의 용량<b> : <%=hmax%> / <%=h%> GB [남은 비율:<%=hper%>%] 형식:<%=hfmt%><br>
<table border="0" height="50" style="font-size:9pt;" cellspacing="0">
<tr>
<td align="center" bgcolor="#FF0000" width="<%=600-(hper*6)%>">사용 용량(<%=cmax%>GB)</td>
<td align="center" bgcolor="#00FF00" width="<%=hper*6%>">사용 가능 용량(<%=h%>GB)</td>
</tr>
</table>
</body>
</html>




2011/11/19 11:47 2011/11/19 11:47

<html>
<head>
<title> URL encode </title>
</head>

<body>
<h2><font color='blue'>장인수</font></h2><br>
<%=Server.HTMLEncode("<h2><font color='blue'>장인수</font></h2>")%><p>
<%=Server.HTMLEncode("<%=Server.ScriptTimeout%\>")%><p>
<a href="ok.asp?width=<%=Server.URLEncode("50%오십")%>">50%</a><p>
<a href="ok.asp?width=50%오십">50%</a>

</body>
</html>




2011/11/19 11:46 2011/11/19 11:46

<%
Set fs = Server.CreateObject("Scripting.FileSystemObject")
Set folderObj = fs.GetFolder(Server.MapPath("."))
Set files = folderObj.Files
%>
<html>
<head>
<title> 파일 리스트 얻기 예제 </title>
</head>

<body>
<h2><%=Server.MapPath(".")%>디렉토리 목록</h2>
<table border="1" width="900" style="font-size:9pt;" cellpadding="2">
<tr>
<th>이름</th>
<th>크기</th>
<th>형식</th>
<th>생성 시각</th>
<th>마지막 엑세스 시간</th>
<th>마지막 수정 시간</th>
</tr>
<%
For Each file in files
%>

<tr>
<td><a href="<%=file.name%>"><%=file.name%></a></td>
<td><%=file.size%> byte</td>
<td><%=file.type%></td>
<td><%=file.DateCreated%></td>
<td><%=file.DateLastAccessed%></td>
<td><%=file.DateLastModified%></td>
</tr>
<%
Next
%>

</table>
</body>
</html>




2011/11/19 11:45 2011/11/19 11:45

무료인 줄 알았던 aspuploader가 굉장히 비싼 놈이란 걸 알고 나서 찾아 나섰더니

비슷하지만(순수 asp code로 만든 upload) 기능은 upload기능만 있는 무료 프로그램이 있네요.

upload기능만 있으면 되지 다른 거야 뭐...

어차피 다른 것들로 할 때도 구현해 줘야 했던 거니까 (용량 제한이나, 확장자 제한 같은 것들)

단점이라고까지 할 건 아닌 듯.

딱 upload기능만 있기 때문에 뭔가 더 설명할 필요를 못 느끼겠네요.

아래 주소로 가면 받을 수 있습니다.

http://www.freeaspupload.net/




2011/11/19 11:41 2011/11/19 11:41
한글 파일을 다운로드 할 때 한글이 깨지는 경우가 생긴다.
이때 파일이름에 server.urlencode를 하면 한글이 깨지지 않는다.
그러나 확장자 뒤에 [1] 혹은 [2] 혹은 [3] 같은 숫자가 붙는다.
원인은 확장자 앞의 .
해결책은 파일 이름과 확장자를 따로 구분해서 파일 이름만 server.urlencode 하기
Response.AddHeader "Content-Disposition","attachment; filename=" & server.urlencode(left(fileName,len(filename)-4)) & right(filename,4)
이런 식으로.
물론 instrrev를 써서 점의 위치를 알아내서 나누는 방법도 있을 수 있고
split을 써서 .을 구분자로 해서 배열 처리하는 방법도 있겠다.
어느 것이 편할 지는 개발자 맘대로.



2011/11/19 11:37 2011/11/19 11:37

ImageMagick는 방대한 옵션을 가진 사용하기 까다로운 도구이다.

그 중에서도 한글 표현을 위해서는 좀 더 까다로운 과정을 거쳐야 한다.


1. 일단 ImageMagick을 설치하자.

http://www.imagemagick.org/script/binary-releases.php#windows

내려 받아서 서버에 설치하면 된다.

물론 ASP니까 VBScript!용 OLE 어쩌구를 선택하고 설치한다.

사용자 삽입 이미지

2. 한글을 표현하려면 두 가지에 주의해야 한다.

-font와 -encoding (-encoding은 중요하지 않다. 변경)

예제)

%@Language="VBScript!" CODEPAGE="65001"%

<%option explicit%>

<%

response.charset="utf-8"

session.codepage="65001"

response.codepage="65001"

Response.ContentType="text/html;charset=UTF-8"

Dim objImg

Set objImg = Server.CreateObject("ImageMagickObject.MagickImage.1")

objImg.Convert "-background=lightblue","-fill=blue","-font=Gulim-&-GulimChe-&-Dotum-&-DotumChe","-encoding=Unicode","-pointsize=36","-size=320x","caption:한글 Test입니다.",server.mappath("test.jpg")

Set objImg = Nothing

%>

<img src=test.jpg>


흔히 gulim.ttf 정도를 쓰면 폰트 파일이 지정이 되는데 2008부터는 폰트 파일 이름이 달라서 고생 좀 했다.

서버 시스템의 폰트 이름을 확인하려면 아래 명령어를 실행하면 된다.

설치할 때 Path를 잡아 주지 않았다면 설치된 폴더에서 실행하자.

convert -list font | more

처음에는 자체 포스트스크립트 폰트(한글 미지원)가 나오고, 이후 시스템에 설치되어 있는 폰트들이 나온다.

-family로 지정해서 사용하는 방법은 실패했다.

-font 방법이 성공해서 더 이상 실험해 보지 않는다.


-encoding이 unicode일 때 이미지 생성할 때 1분 12초가 걸렸고, wansung일 때 1분 8초가 걸렸다.

이 정도는 유의미한 차이가 없다고 볼 수 있고, 둘 다 느리기는 마찬가지다.

참고로, 예제의 짧은 문장이 아니라 200자가 넘는 상당히 긴 문장으로 실험을 했다.


Malgun-Gothic으로 -font를 변경하니 1초만에 결과물이 나온다.

예제의 Gulim-&-GulimChe-&-Dotum-&-DotumChe를 Malgun-Gothic으로 바꿔서 사용하시길.

2008에서 실험한 결과임을 상기하고 2003 이하에서는 각자 실험해서 사용하시길.





2011/11/19 11:36 2011/11/19 11:36
jQuery.ajax 로 JSON 사용시 euc-kr등에서 유니코드 문자 안깨지게 처리하는게 귀찮아서 만들었습니다

대충 아래처럼 씁니다

<!--#include file="json_disp.asp"-->
<%
Function AjaxTest1(result)
result.Add "ip", Request.ServerVariables("REMOTE_ADDR")

AjaxTest1 = True
End Function

Set json = new JsonDispatcher
Call json.AcceptParamValue("AjaxTest1", "mode", "test1")
%>
<script type="text/javascript">
$(function(){
$.post('test.asp',{mode:'test1'},function(result){
alert(result.ip);
},'json');
});
</script>



2011/11/09 17:50 2011/11/09 17:50
아래 소스는 렌터카 회사에서 차량 대여 확인서를 발급하기 위해서 만든 소스이다.
각각의 글 내용들을 그림으로 만든 후 바탕 그림과 합성을 하는 방법을 사용한다. (공식 사이트에서도 같은 방법을 쓴다.)

Dim objImg
Set objImg = Server.CreateObject("ImageMagickObject.MagickImage.1")
'차종
objImg.Convert "-background=white","-fill=black","-font=Malgun-Gothic","-pointsize=28","-size=800x","caption:차종",server.mappath("차종경로")
'차량번호
objImg.Convert "-background=white","-fill=black","-font=Malgun-Gothic","-pointsize=28","-size=800x","caption:차량번호",server.mappath("차량번호경로")
'확인서 내용
objImg.Convert "-background=white","-fill=black","-font=Malgun-Gothic","-pointsize=28","-size=900x","caption:확인서 내용, 엔터는 vbcrlf를 쓰거나 \n를 쓸 수 있다. 사용법은 각각 asp와 자바스크립트에 준한다.",server.mappath("확인서 내용경로")
'발급일
objImg.Convert "-background=white","-fill=black","-font=Malgun-Gothic","-pointsize=28","-size=300x","-gravity=East","caption:발급일",server.mappath("발급일경로")
'발급자
objImg.Convert "-background=white","-fill=black","-font=Malgun-Gothic","-pointsize=28","-size=800x","-gravity=East","caption:발급자",server.mappath("발급자경로")

'차종 합성
objImg.composite "-geometry=+270+295",server.mappath("차종경로"),server.mappath("원본경로"),server.mappath("확인서경로")
'차량번호 합성
objImg.composite "-geometry=+270+330",server.mappath("차량번호경로"),server.mappath("확인서경로"),server.mappath("확인서경로")
'확인서 내용 합성
objImg.composite "-geometry=+90+520",server.mappath("확인서 내용경로"),server.mappath("확인서경로"),server.mappath("확인서경로")
'발급일 합성
objImg.composite "-geometry=+700+1100",server.mappath("발급일경로"),server.mappath("확인서경로"),server.mappath("확인서경로")
'발급자 합성
objImg.composite "-geometry=+130+1270",server.mappath("발급자경로"),server.mappath("확인서경로"),server.mappath("확인서경로")
Set objImg = Nothing


1. 엔터는 vbcrlf를 쓰거나 \n를 쓸 수 있다. 사용법은 각각 asp와 자바스크립트에 준한다.
2. gravity는 정렬을 나타낸다. 8방위(NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast)를 사용한다.
3. geometry는 왼쪽 제일 위를 0,0으로 하는 좌표다.                                       


2011/11/09 17:46 2011/11/09 17:46
1. 자바스크립트로 이용할경우
<script language=javascript>
function goPage(cc_val) {
var param = "";
param += "?aa=11";
param += "&bb=22";
param += "&cc=" + escape(cc_val);

location = "test.asp" + param;
}
< /script>

2. 자바스크립트를 서버단 스크립트 언어로 이용
<script language=javascript runat=server>
function asp_escape(val) {
return escape(val)
}
< /script>
< a href="test.asp?aa=11&bb=22&cc=<%=asp_escape(cc_val)%>">링크다</a>



2011/10/23 12:08 2011/10/23 12:08
ASP용 로그 기록 클래스

많은 개발자들이 개발을 하면서 중간 중간 소스에 Response.Write 변수 를 추가 합니다.

이유는 디버깅 용이죠! ^^

하지만, 개발 완료 후 삭제도 해야 하고 혹여나 깜빡하고서 누락하는 경우가 있는데요.

누락한 것 중 지저분 해지기만 하고 문제가 되진 않지만 어떤 사람들은 dB 커넥션 문자열을 찍어서

노출이 되는 경우도 있기도 합니다. ㅎㅎㅎ

공개 소스 중에는 Log4J라는 모듈이 있습니다만, 이건 JSP, Ruby, .Net 용으로만 있고 ASP용은 없지요.

그래서 아쉬운 대로 만들어 봤습니다.

제가 생각했을 때 이 클래스를 사용하므로서 얻을 수 있는 이득을 나열해 보죠.


1. 운영 중에도 에러나 기타 정보를 기록하여 디버깅 및 유지보수에 용의합니다.
2. 실수로 중요 정보가 외부에 노출되는 것을 방지합니다. (예: Response.Write에 의해)
3. 확장 함수를 이용하여 받아들인 파라미터 등을 기록하는 것이 가능합니다.
4. 로그 레벨을 이용 하여 기록 기준을 정의 할 수 있으므로 성능이 나빠지는 것에 대응 할 수 있습니다.
5. 파일에 기록이 되므로 언제든 역 추적이 가능합니다. ( 1번과 비슷 한 내용이네요 ^^ )

다음은 사용 예입니다.

<!--#include virtual="ClsLogger.asp"//-->
<%On Error Resume Next%>
<%
'// Logger
Dim oLog : Set oLog = New ClsLogger

'// Request Log
TraceRequestParameter oLog

'//      FATAL : 치명적 에러
oLog.Fetal "치명적 에러!!! 관리자 빨리 보삼. : " & Err.Description

'//      ERROR : 수행 가능한 정도의 에러
oLog.Error "또 에러냐!!! : " & Err.Description

'//      WARN : 문제를 일으킬 가능성의 정보
oLog.Warn "이건 귀찮아서 처릴 안했단 말이오!!! : "

'//      INFO : 정보를 나타낼 때 사용
oLog.Info "게시판 목록 시작"

'//      DEBUG : 상세 정보를 나타낼 때 사용
oLog.Debug "지금은 개발 중..."

If ( Err.Number = 0 ) Then
   oLog.Debug "완료"
Else
   oLog.Error Err.Description
End If


'------------------------------------------------------------------------------------
'// Request 객체의 파라미터 값을 로그에 기록한다.
'// 이 함수는 ClsLogger에 포함 시킬지 말지 고민중 ... ㅠㅠ
'------------------------------------------------------------------------------------
Sub TraceRequestParameter(ByRef pLog)

   On Error Resume Next

   Dim pContentType : pContentType = LTrim(Request.ServerVariables("CONTENT_TYPE"))

   If ( InStr(pContentType, "multipart/form-data") > 0 ) Then
      Exit Sub
   End If

   If ( Not IsObject(pLog) ) Then
      Exit Sub
   End If

   Dim z
   Dim pKeyName
   pLog.Debug "============= FORM PARAMETER ============="
   For z = 1 To Request.Form.Count
      pKeyName = Request.Form.Key(z)
      pLog.Debug "Dim " & pKeyName & " : " & pKeyName & " = RequestForm(""" &
pKeyName & """)"
   Next

   For z = 1 To Request.Form.Count
      pLog.Debug Request.Form.Key(z) & " : " & Request.Form(z)
   Next

   pLog.Debug "========== QUERYSTRING PARAMETER ========="
   For z = 1 To Request.QueryString.Count
      pKeyName = Request.QueryString.Key(z)
      pLog.Debug "Dim " & pKeyName & " : " & pKeyName & " = RequestQuery(""" &
pKeyName & """)"
   Next

   For z = 1 To Request.QueryString.Count
      pLog.Debug Request.QueryString.Key(z) & " : " & Request.QueryString(z)
   Next  
   pLog.Debug "=========================================="

   Err.Clear

   On Error GoTo 0

End Sub
%>

저의 경우 주로 .Error와 .Debug를 사용합니다.

일단 속는 셈 치고 한번 사용해보셔요. ^^

많은 분들이 자기가 원하던 거라고 하시더군요. 다행 다행.

아 그리고 로그뷰어는 "mtail" 이라는 프로그램을 이용합니다. 네이년에서 mtail로 검색을 하시면 쉽게 구 할 수 있어요.

간단하게 소개하면
   기록되는 로그를 실시간으로 모니터링 할 수 있고,
   필터링도 가능합니다. 이 필터링을 이용하면 Error만 볼수도 있고 Debug만 볼수도 있습니다.



2011/10/21 02:07 2011/10/21 02:07
국가별 IP체크 꼭 필요한 사항은 아니나 사이트 접속정보 구성시 고려해볼 만한 사항이며
로그분석 업체에서는 이미 사용중인 기능이기도 합니다.

로그분석에 어떤 국가의 IP인지 확인할 수 있다면 악의적인 IP의 접근 차단도 할수 있을것이며
인젝션 공격등 방어를 위해 특정 국가의 접속을 막을수도 있을 것입니다.

위 사이트에서는 데모 버전이 올라와 있습니다.
ASP 버전으로 데모버전에는 데모데이터를 활용하고 있습니다.
데모데이터를 실제 마지막으로 업데이트된 데이터로 교체하여 사용하시면 된답니다.

첨부파일에는 2009년 2월 데이터와 예제 프로그램이 있으니 필요하신 분은 첨부파일을 받아 사용하세요~

--------------------------------------------------------------------------------------------------------------------

사용법
1. GeoIPCOM.dll을 system32 폴더에 복사
2. regsvr32 GeoIPCOM.dll - 레지스트리에 DLL등록
3. ASP 프로그램에 적용

set geoip = Server.CreateObject("GeoIPCOM.GeoIP")

geoip.loadDataFile("C:\Program Files\GeoIP\GeoIP.dat")
country_code = geoip.country_code_by_name(hostname)
country_name = geoip.country_name_by_name(hostname)



2011/10/21 02:05 2011/10/21 02:05
<%@ Language=VBScript %>
<%
Dim UpPath, fPath(1), fSize(1), tmp
Dim fWaterMark, fThumbnail, SourceFileName

Set QueryForm = Server.CreateObject("DEXT.FileUpload")
QueryForm.DefaultPath = "C:\Temp"

' 원본 업로드
UpPath = QueryForm("file").Save
response.write "Save as Source Image:"& UpPath


Set objImage = Server.CreateObject("DEXT.ImageProc")

if objImage.SetSourceFile(UpPath) = True then
' FileNameWithoutExt 속성은 업로드한 파일의 이름을 리턴한다.(확장자 제외)
tmp = "/DEXTUploadProSamples/Image/WaterMark/watermark.bmp"
SourceFileName = QueryForm("file").FileNameWithoutExt

fPath(0) = "C:\Temp\"& SourceFileName &"(WaterMark).jpg"
fPath(1) = "C:\Temp\"& SourceFileName &"(Thumbnail).jpg"

' 워터마크 처리
fWaterMark = objImage.SaveAsWatermarkImage(tmp,fPath(0),-10,-10,false)
response.write "Save as Watermark Image: "& fWaterMark
end if

if objImage.SetSourceFile(fWaterMark) = True then
' 워터마킹 처리 된 이미지로 썸네일 처리 한다.
fSize(0) = objImage.ImageWidth / 2
fSize(1) = objImage.ImageHeight / 2
fThumbnail = objImage.SaveasThumbnail(fPath(1),fSize(0),fSize(1),false)
response.write "Save as Thumbnail: "& fThumbnail
end if

Set objImage = Nothing
Set QueryForm = Nothing
%>



2011/10/10 14:52 2011/10/10 14:52