세이박스

드림위브에서 특정 확장자를 php 또는 asp, jsp 확장자로 인식 하게끔 적용하기

웹프로그램
사용자 삽입 이미지

1. 드림위버에서 .say 확장자 오픈 되도록 적용

드림위버를 실행후 메뉴 > Edit > Preferences > File Types / Editors > Open in code view:
항목에 .say 추가 합니다.

.js .asa .css .cs .config .inc .txt .as .asc .asr .vb .say


2. 드림위버에서 .say 확장자 파일을 불러올 때 php 코드 부분 컬러를 변경 되도록 적용

C:\Program Files\Adobe\Adobe Dreamweaver CS3\configuration\DocumentTypes\MMDocumentTypes.xml

파일을 EditPlus 또는 메모장으로 열어서 Ctrl + F 찾기에서 "php"를 찾습니다.

<documenttype id="PHP_MySQL" servermodel="PHP MySQL" internaltype="Dynamic" winfileextension="php,php3,php4,php5,say" macfileextension="php,php3,php4,php5,gdy" file="Default.php" writebyteordermark="false">

위 소스 라인에서 ,say 라고 추가 한것 처럼 추가 하시면 됩니다.


3. 드림위버 종료후 재시작
반드시 위 사항 적용후 다시 실행 해야 적용 됩니다.
이제 드림위버에서 index.say 라는 파일을 오픈시 바로 열리면서 php 코드가 있으면 지정된 코드 컬러로 표시 될 겁니다.
이와 같이 php 뿐만 아니라 asp, jsp, html 등의 컬로로도 지정 하 실수 있습니다. (2번 항목 응용)
테스트는 Dreamweaver CS3, Dreamweaver CS4 에서만 해봤기에 이하 버전에서도 동일하게 처리 되는지는 확인 하지 못했습니다.

BeginTrans, CommitTrans 및 RollbackTrans 메서드 (ADO)

웹프로그램
BeginTrans, CommitTrans 및 RollbackTrans 메서드 (ADO)

이들 트랜잭션 메서드는 아래와 같이 Connection 개체 내의 트랜잭션 프로세싱을 관리합니다.
  • BeginTrans는 새 트랜잭션을 시작합니다.

  • CommitTrans는 모든 변경 내용을 저장하고 현재 트랜잭션을 끝냅니다. 이 메서드는 트랜잭션을 시작할 수도 있습니다.

  • RollbackTrans는 현재 트랜잭션 동안 취해진 모든 변경 내용을 취소하고 이 트랜잭션을 끝냅니다. 이 메서드는 트랜잭션을 시작할 수도 있습니다.

구문
level = object.BeginTrans()
object.BeginTrans
object.CommitTrans
object.RollbackTrans

반환값
BeginTrans는 트랜잭션의 중첩 수준을 나타내는 Long 변수를 반환하는 함수로서 호출될 수 있습니다.

매개 변수
object   Connection 개체

Connection
원본 데이터에 한 단위씩 취해진 일련의 변경 내용을 저장하거나 취소하려면 Connection 개체와 함께 이들 메서드를 사용합니다. 예를 들어 두 계좌 사이에 돈을 전송하려는 경우, 한 계좌에서 일정 금액을 인출한 후 다른 계좌에 동일 금액을 추가할 수 있습니다. 이 때 어느 한 쪽이라도 업데이트가 제대로 되지 않으면 계좌 사이의 금액이 균형을 이루지 않습니다. 열린 트랜잭션에서 이러한 변경을 수행하면 이들 변경 내용들이 모두 적용되게 하거나 또는 전혀 적용되지 않게 할 수 있습니다.

메모   모든 제공자가 트랜잭션을 지원하는 것은 아닙니다. Connection 개체의 Properties 컬렉션에 제공자 정의 속성 "Transaction DDL"이 표시되는지 확인하여 해당 제공자에서 트랜잭션이 지원되는지 확인하십시오. 제공자가 트랜잭션을 지원하지 않을 경우에 이들 메서드 중 하나를 호출하면 오류가 발생합니다.
일단 BeginTrans 메서드가 호출되면 제공자는 트랜잭션을 끝내기 위해서 CommitTransRollbackTrans를 호출하기 전에는 어떤 변경도 즉시 수행하지 않습니다.
중첩 트랜잭션을 지원하는 제공자의 경우, 열린 트랜잭션 내에서 BeginTrans 메서드를 호출하면 새로운 중첩 트랜잭션이 시작됩니다. 반환값은 중첩 수준을 표시합니다. 즉, 반환값이 "1"인 경우에는 최상위 트랜잭션(이 트랜잭션은 다른 트랜잭션 내에서 중첩되지 않음)을 열었다는 표시이며, "2"는 둘째 수준의 트랜잭션(최상위 트랜잭션과 중첩된 트랜잭션)을 열었음을 나타냅니다. CommitTrans 또는 RollbackTrans를 호출하면 가장 최근에 열었던 트랜잭션에만 영향을 줍니다. 즉, 다른 상위의 트랜잭션에 영향을 주려면 현재 트랜잭션을 닫거나 롤백해야 합니다.
CommitTrans 메서드를 호출하면 연결 상태의 열린 트랜잭션 내에서 취해진 변경 내용을 저장하고 이 트랜잭션을 닫습니다. RollbackTrans 메서드를 호출하면 열린 트랜잭션 내에서 취해진 모든 변경 내용을 되돌리고 트랜잭션을 닫습니다. 열려 있는 트랜잭션이 없을 때 이들 메서드를 호출하면 오류가 발생합니다.
Connection 개체의 Attributes 속성에 따라 CommitTrans 메서드 또는 RollbackTrans 메서드를 호출하면 자동으로 새 트랜잭션이 시작됩니다. Attributes 속성을 adXactCommitRetaining으로 설정하면 CommitTrans를 호출한 후 제공자가 자동으로 새 트랜잭션을 시작합니다. Attributes 속성을 adXactAbortRetaining으로 설정하면 RollbackTrans를 호출한 후 제공자가 자동으로 새 트랜잭션을 시작합니다.

Remote Data Service
클라이언트 Connection 개체에서는 BeginTrans, CommitTransRollbackTrans 메서드를 사용할 수 없습니다.

ASP 메일발송시 오류 Microsoft VBScript 런타임 오류 error '800a0046' 사용 권환이 없습니다.

웹프로그램
윈도우서버의 SMTP 를 이용한 메일 발송시 사용권환이 없다는 오류가 발생 하는 경우

Microsoft VBscript 런타임 오류 error '800a0046'
사용 권한이 없습니다.

.........
set objmail = server.CreateObject("cdonts.newmail") '메일 객체 선언
objmail.from=strfrom
objmail.to=strto
objmail.subject=strsubject
objmail.body=strbody
objmail.importance=1 '중요도
objmail.bodyformat = 0
objmail.mailformat = 0
objmail.send '메일 보내기
set objmail=nothing '메일 객체 닫기
..............
objmail.send '메일 보내기 <-- 요부분이 오류가 발생


비슷한 코딩으로 사용했을 겁니다.
정확한 해결방법인지는 모르겠지만 저의 경우 다음과 같은 이유로 해결되었습니다.


c:\inetput\mailroot\ 폴더에 보안 설정에 쓰기 권환을 주는것으로써
폴더의 등록정보 > 보안 에서
인터넷 게스트 개정 (IUSER_ ), IIS 프로세스 시작 개정 (IWAM_ )
두 개정에 쓰기권환을 주셔야합니다.

IIS가 메일 발송처리 되면서 임시로 메일을 기록하거나 실패한 메일 보관또는 수신메일 저장 권환이 없어서 생긴 오류더군요.

그럼 같은 증상으로 해결되길 바랍니다. 

iframe 삽입 공격 보안

서버,보안

1. 사건 배경
평소 꾸준히 방문하던 쇼핑몰에 어느날 갑자기 뽀로록 소리가 나면서 상단 바에 노란줄이 생기며 경고가 뜬다 혹은 알약 등 백신에서 감시프로그램이 "치명적인 바이러스에 감염되었습니다."라고 뜬다. 너무나 당황한 A군 해당 쇼핑몰에 접속하기 겁이 난다 ㅜㅜ;

2. 사건 원인
해당 쇼핑몰은 iframe 삽입 공격을 받은것이다. DB인젝션 공격과는 좀 다른 유형으로써 윈도우 웹서버 개정관련 보안 취약점을 공격하는 방식이다.
원인은 홈페이지 폴더에 everyone 개정에 쓰기권환까지 줬기 때문에 생긴 문제이다.
폴더에 속성 > 보안 눌러보세요 분명 everyone 개정으로 설정되어 있을겁니다.
윈도우 2000서버 등 초기 IIS 서비스 당시 everyone으로 설정한 운영자가 더러 있었을 겁니다.
이유야 어찌 되었던 이제라도 발견 하셨다면 다행인거죠! ^^ 화이팅!

3. 보안 방법
홈페이지 폴더에 IUSR_서버명, IWAM_서버명 의 두 개정을 추가하고 everyone 개정은 삭제 합니다. 그리고, IUSR_, IWAM 권환에 읽기,실행 권환만 줍니다. 그리고, 게시판 첨부파일이 업로드될 폴더등 쓰기 권환이 꼭 필요한 곳에만 쓰기 권환을 줍니다.
저의 경우엔 웹서비스 디렉토리 바깥쪽에 폴더를 만들어 업로드 하도록 해놨습니다.


윈도우 서버 보안 취약점으로 인해 생기는 문제가 참 많군요 ^^;

[ASP] session배열

웹프로그램
ASP 에서 새션 배열 처리
 
* session배열 dim user(9) user(0)=rs("userid"); . . user(9)=rs(); session("kkk")=user 호출해서 쓸때 -> session("kkk")(0)

ASP Applictaion

웹프로그램
* Applictaion
Application("kkk") - 응용프로그램. 접속한 이상 모든 사용자 같은 변수
Session("kkk") - 각 개인에게 부여되는 변수. 서로 다 틀림.

ASP 스팸성 글올리기 방지

웹프로그램

-. write.asp 페이지

<input type="hidden" name="sessionid" value="<%=session.SessionID%>">


-. insert.asp 페이지
<%
if not request("sessionid") = session.SessionID then
Response.Write "<script language=javascript>"& vbCrLf &_"
alert('올바른접근이아닙니다.');"& vbCrLf &_"
history.back();"& vbCrLf &_"</script>"
Response.End end if
%>

ASP 해킹 방지 보안 방법(injection, cross site scripting...)

웹프로그램
정리해서 올려야하는데..귀찮아서 일단 문서 일부분에서 발췌한것만 올린다.
참고로 이 보안관련 문서는 대외비라서 일부분만 올린것인데 이 문서에는
asp 뿐만 아니라 php, jsp 용도 있다.

혹 필요해서 요청하면...-_-;;;;;


<%
'////////////////////////////////////////////////////////////////////
'//가.  명령어 삽입(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.descript-xion & "<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-x language=javascript-x>"
    Response.Write "alert(""파일명을 입력해 주세요"");"
    Response.Write "history.back();"
    Response.Write "</script-x>"
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 '객체 초기화
%>

ASP 특수문자 삽입 차단

웹프로그램
m_id = Trim(Request("m_id"))
 
'아이디 특수기호 차단
if(InStrRev(m_id, "'") <> 0 Or InStrRev(m_id, "<") <> 0 Or InStrRev(m_id, ">") <> 0 Or InStrRev(m_id, "=") <> 0) Then
 '특수문자 발견 차단 처리
End if

ASP 함수 InstrRev( )

웹프로그램
* InstrRev( ) 함수
 
벌써 ASP 2년을 훌쩍 넘겼는데, 엊그저께 업로드 관련 처리를 하다가 알게된 함수이다. ^^;
(허구 페이스 팔려. ㅜ,ㅡ)
 
---------------------------------------------------------------------
InstrRev(문자열, 지정할 문자) 함수는 특정문자열이 나타나는 위치를 끝에서부터 찾는 함수 입니다.
리턴값이 없을 때에는 [0]을 반환 합니다.
---------------------------------------------------------------------
 
ex ------------------------------------------------------------------
시나리오)자료실의 글쓰기에서 파일 업로드시에 업로드할 파일의 파일 이름을 구한다.
 
filePath = Trim(Request.Porm("txtFilePath")) '--filePath = "c:\board\community\readme.hwp"
fileName = Mid(filePath, InstrRev(filePath, "\")+1) '--fileName="readme.hwp"

ASP P3P 타도메인간 세션및쿠키 공유

웹프로그램
맛있는공인중개사(http://landtop.co.kr)은 모 호스팅 업체의 포워딩 서비스를 받고 있다.
해당 도메인은 http://landtop.hiedu.net 이다. 홈페이지 오픈해준지 보름이 지났는데, 아무 말씀없으시다가-
갑작스레(오늘) 회원가입도, 로그인도 안된다고 하신다. 잘 되고 있다고 생각해서 신경도 안쓰고 있었는뎅//
 
안될리가 없을텐데-
어~ 안된다 (__ #)
 
 
서로 다른 도메인을 포함하는 프레임 구조로 사이트를 IE6에서 열게되면, 쿠키가 적용되지 않는다
원인은 MS에서 쿠키 정보의 남용을 막기위해서 P3P 규약을 도입했기때문이다.
그래서 다른 주소지로 연결되는 프레임구조(특히 포워딩 고정 연결)로 웹페이지가 열리게 되면, 쿠키가 적용되지 않게 된다.
 

<해결방법>
1. 웹페이지에서 P3P규약을 허용하는 HTTP 헤더를 추가하는 방법
2. 웹서버에서 P3P 규약을 허용하는 HTTP 헤더 추가하는 방법
3. IE에서 직접 설정(도구-인터넷-개인정보-고급-자동쿠키덮어쓰기(제3사쿠키) 체크)
 
3번은 사용자에게 일일히 해달라고 부탁 할수도 없는 노릇이기에 버려~
 
 
1번에 대한 asp 페이지 적용법은 아래소스 삽입
<%
Response.AddHeader "P3P", "CP=NOI CURa ADMa DEVa TAIa OUR DELa BUS IND PHY ONL UNI COM NAV INT DEM PRE"
%>

VBScript.Encode 엔코드 된 파일을 디코더(Decode) 하기

웹프로그램
<%@ LANGUAGE = VBScript-x.Encode %>
파일 시작에 다음과 같이 표시된 소스는 보는바와 같이 VBScript-x로 엔코드 된 소스라 보시면됩니다.
 
친절하게도
사이트에서 제공하는 프로그램으로 디코드가 가능합니다.
 
다운로드는
에 .exe 실행파일과 .c 유닉스타입의 파일 2가지 제공합니다.
(즉, IIS, Linux 용... .exe는 당근 윈도우용이니 ASP에서 사용가능)
 
하지만 간단하게 파일을 자신의 컴에서 디코더 하고자 한다면
scrdec18.exe 파일을 C:\ 로 다운받으시고
디코드할 대상 파일도 C:\ 로 복사하신뒤에  (예: test.asp)
 
코멘드창에서 ( 시작 - 실행 - cmd.exe )
c:\scrdec18.exe test.asp test2.asp
로 실행 하시면 test2.asp에 디코드 된 소스로 저장된것을 확인 가능합니다

asp와 저장프로시저 사용하기

웹프로그램
그냥 제가 아는 간단한 범위에서 사용법을 정리합니다.

간단하게 고객의 고유번호를 가져와서 뿌려주는 asp문구를 살펴보면

sql = "select num from member_table"
Set Rs = Server.CreateObject("ADODB.RecordSet")
Rs.open(sql),Cn,1,1

while Rs.EOF =false
response.wirte rs(0) & "
"
Rs.movenext
wend
Rs.close
Set Rs = nothing


이렇게 된다.한줄씩 떨어뜨리면서 고객의 고유번호를 찍어내지요

그럼 이것을 저장 프로시저로 쓰려면,
EM을 열어서 저장프로시저를 클릭후 마우스 오른쪽 버튼으로 새 저장 프로시저 를 클릭하여 새롭게 하나 저장프로시저를 만듭니다.

CREATE PROCEDURE [dbo].[sp_text] AS
sql = "select num from member_table"

이렇게 sql문 앞에 프로시저 이름을 넣어줍니다. EM에서 저장을 하고 마무리 합니다.

그리고 나서 위에 문장을 asp 페이지에서 다시 쓰면

sql = "exec sp_text"
Set Rs = Server.CreateObject("ADODB.RecordSet")
Rs.open(sql),Cn,1,1

while Rs.EOF =false
response.wirte rs(0) & "
"
Rs.movenext
wend
Rs.close
Set Rs = nothing

이러면 간단하게 돌아가는 것을 알수 있습니다.
위에 실행과 아래에 적은 실행의 차이점은 sql문의 차이이고, 그걸 asp페이지에다가 쓰느냐 아니면 sql서버에 등재시키느냐 그차이점이지요


보통 sql은 어떤 변수를 받아서 그것을 토대로 sql문을 돌리지요
그럼 번호 3번인 사람의 이름을 뽑아내는 저장프로시저를 만들면

CREATE PROCEDURE [dbo].[sp_text]
@num int
AS
sql = "select name from member_table where num = @num"

이렇게 만들수가 있지요

그럼 asp 페이지에서는 다음과 같이 씁니다.
num = request.form("num")
sql = "exec sp_text @num=" & num
Set Rs = Server.CreateObject("ADODB.RecordSet")
Rs.open(sql),Cn,1,1
response.wirte rs(0) & "
"

그럼 마찬가지로 변수를 넘겨주는것을 확인할수 있습니다.
콤마를 사용해서 변수를 여러개를 붙일수있습니다.

CREATE PROCEDURE [dbo].[sp_text]
@num int,
@aaa int
AS
sql = "select name from member_table where num = @num and aaa=@aaa"

이것의 asp 페이지에서 sql문은
sql = "exec sp_text @num=" & num & ",@aaa=1"

이상입니다.
매우 간단한 저장 프로시저였습니다요~

[ASP] 문자열 관련 함수

웹프로그램
ASP코드를 작성하다 보면 문자열을 다양한 방식으로 변환하거나 원하는 문자열을 뽑아낸다든지
 
하는 등의 작업들이 필요합니다. 다음 내용은 대표적인 문자열 관련 함수입니다.
 
UCASE, LCASE         => 문자열의 내용을 대문자, 소문자로 변환시켜준다.
LEN                         => 문자열의 길이를 반환한다.
LEFT, RIGHT, MID     => 문자열의 좌, 우, 중간에서 지정한 만큼의 문자열을 뽑아낸다.
INSTR, INSTRREV      => 해당되는 문자열의 좌측, 우측 위치를 반환한다.
LTRIM, RTRIM, TRIM => 문자열의 좌측, 우측, 전체의 공백을 제거한다.
REPLACE                 => 문자열의 내용중 일부를 다른 문자열로 변경한다.
SPLIT                       => 문자열에서 특정 문자열을 기준으로 나누어 배열로 저장한다.
 
 
1. UCASE, LCASE
- UCASE : 문자열의 내용을 모두 대문자로 변환시켜준다.
- LCASE : 문자열의 내용을 모두 소문자로 변환시켜준다.
- 표현법 : UCASE(변환대상문자열), LCASE(변환대상문자열)
<%
strTest = "I Love Kimo"
strUpper = UCASE(strTest)
strLower = LCASE(strTest)
 
Response.Write "원본글 : " & strTest & "<br>"
Response.Write "UCASE : " & strUpper & "<br>"
Response.Write "LCASE : " & strLower & "<br>"
%>
위 소스를 실행해 보면 다음과 같이 출력이 된다.
원본글 : I Love Kimo
UCASE : I LOVE KIMO
LCASE : i love kimo
 
2.  LEN
- 문자열의 길이를 반환합니다.
- 표현법 : Len(검색대상문자열)
<%
strTest1 = "I Love Kimo"
strTest2 = "안녕하세요"
 
intLength1 = LEN (strTest1)
intLength2 = LEN (strTest2)
 
Response.Write intLength1 & "<br>"
Response.Write intLength2
%>
결과를 보면 11과 5가 나옵니다. 영문과 한글모두 글자수 그대로 반환이 됨을 알 수 있습니다.
 
 
3.  LEFT, RIGHT, MID  
- LEFT 는 문자열에서 지정한 숫자만큼 왼쪽에서 부터 추출하여 반환합니다.
- RIGHT 는 문자열에서 지정한 숫자만큼 오른쪽에서 부터 추출하여 반환합니다.
- MID 함수는 문자열의 지정한 위치에서, 지정한 길이 만큼의 문자열을 반환합니다.
- 표현법 : LEFT(문자열,추출길이), RIGHT(문자열,추출길이), MID(문자열,시작위치,추출길이)
<%
strTest = "I Love Kimo"
strLeft = Left(strTest,5)
strRight = Right(strTest,4)
strMId = Mid(strTest,3,2)
 
Response.Write strTest & "<br>"
Response.Write strLeft & "<br>"
Response.Write strRight & "<br>"
Response.Write strMid & "<br>"
%>
위 소스의 결과는 아래와 같습니다. (공백도 한 글자로 인식)
I Love Kimo
I Lov
Kimo
Lo
 
4. INSTR, INSTRREV    
- INSTR은 해당되는 문자열이 좌측에서 몇번째에 존재한다는 위치를 반환합니다.
- INSTRREV은 해당되는 문자열이 우측에서 몇번째에 존재한다는 위치를 반환합니다.
- INSTR, INSTRREV 은 동일한 문자열이 있을경우 제일먼저 검색이 되는 위치입니다.
- 표현법 : Instr(검색대상,검색문자열),InstrRev(검색대상,검색문자열)
 
<%
strTest = "우리나라에서 제일 큰 강은 한강이다. 우리나라에서 제일 큰 산은 한라산이다"
strInstr = Instr(strTest,"나라")
strInstrRev = InstrRev(strTest,"나라")
 
Response.Write strInstr & "<br>" & strInstrRev
%>
결과를 보면 3 , 24 가 나옵니다. 검색할 문자열에서 "나라" 라는 문자열이 왼쪽에서 처음 검색되는 위치는 3이고 오른쪽에서 부터 검색하면 24가 됩니다.
 
 
5.  LTRIM, RTRIM, TRIM
- LTRIM : 문자열에서 왼쪽에 있는 공백을 제거한 결과를 반환.
- RTRIM : 문자열에서 오른쪽에 있는 공백을 제거한 결과를 반환.
- TRIM   : 문자열에서 양쪽에 있는 공백을 제거한 결과를 반환.
- 표현법 : LTRIM(문자열), RTRIM(문자열), TRIM(문자열)
<%
strTest = "   I Love You   "
strLTrim = LTrim(strTest)
strRTrim = RTrim(strTest)
strTrim = Trim(strTest)
 
Response.Write strTest & "<br>"
Response.Write strLtrim & "<br>"
Response.Write strRtrim & "<br>"
Response.Write strTrim & "<br>"
%>
위소스의 결과를 보면 브라우저에는 아래와 같이 결과가 동일해 보일겁니다.
I Love You
I Love You
I Love You
I Love You
그러나 소스보기를 해서 보면 어떤 차이가 있는지 금방 알 수 있습니다.
    I Love You     <br>I Love You     <br>    I Love You<br>I Love You<br>
원글은 양쪽으로 모두 3칸의 공백이 있고 LTRIM을 한 부분은 왼쪽공백이 제거 되어 있고
RTRIM을 한쪽은 오른쪽 공백이 TRIM을 한곳은 양쪽모두 공백이 제거 되었음을 알 수 있습니다.
 
6.  REPLACE
- 문자열 중에서 특정 내용을 다른 내용으로 바꾸려 할 때 REPLACE 함수를 사용합니다.
이 함수의 사용법은 다음과 같습니다.
- 표현법 : REPLACE(원본문자열,"변경대상문자열","변경할새로운문자열")
<%
strBefore = "I like you.. Do you like me?"
strAfter = REPLACE (strBefore, "like", "love")
Response.Write strBefore & "<br>"
Response.Write strAfter & "<br>"
%>
위 소스의 결과를 보면 위 문장에 있는 "like" 라는 단어가 "love"로 변경 된것을 알 수 있습니다.
이러한 REPLACE구문은 특히 게시판에서 글을 등록시킬때 많이 사용됩니다. (태그를사용하지 못하게 할 경우와 태그를 사용하게 하는 경우)
 
7. SPLIT
- 이 함수는 어떤 문자열에서 특정한 문자열 또는 기호를 기준으로 문자열을 분해한 다음,
분해된 문자열들을 배열에 저장하는 함수입니다.
- 표현법 : REPLACE(원본문자열,"분해기준")
<%
strTemp = "aaa, bbb, ccc, ddd, eee"
arrTemp = Split(strTemp,",")
 
Response.Write arrTemp(0) & "<br>"
Response.Write arrTemp(1) & "<br>"
Response.Write arrTemp(2) & "<br>"
Response.Write arrTemp(3) & "<br>"
Response.Write arrTemp(4) & "<br>"
%>
위 소스에서 strTemp에 저장된 데이터는 "," 를 기준으로 5개의 데이터가 있습니다.
Split 함수를 이용하여 "," 를 기준으로 기존 문자열을 분리하여 배열을 생성했습니다. Split 함수를
이용하면 자동으로 배열이 생깁니다.

asp에서 변수 안에 있는 문자열을 검사해서 특정 문자가 있는지 검사

웹프로그램
sql에서는 like로 문자열 검색을 하는데..
변수에 있는 특정문자가 있는지 확인 하는 함수가 있는지...
test="1,2,3,4,5,6,7"
aa=(test에 2가 있으면 aa에 2값 저장)
 
Dim test, aa
test = "1,2,3,4,5,6,7"
 
IF instr(test,"2") Then
   aa = "2"
Else
   aa = ""
End IF
 
즉, instr 함수 사용하면됨.

[ASP] asp 페이징

웹프로그램


'페이지값 받기

  if  request("page")= "" then    
      page = 1
  else
      page = request("page")    
  end if
 
'한페이지에 보여줄 리스트갯수
listnum = 10
 
'전체리스트값
sqlt = "select count(코드값) from tablename"
set rst = dbcon.execute(sqlt)
totalnum = rst(0)
 
  SQL = "select * from tablename"
  Set Rs = Server.CreateObject("ADODB.Recordset")
  Rs.PageSize = listnum
 
  Rs.Open SQL, Conn, 1     '커서타입이 1이어야 하나? 흠흠
 
  totalpage = rs.PageCount       '전체페이지의 수를 저장
  rs.AbsolutePage = page         '현재 레코드셋의 커서를 페이지에 맞게 옮겨준다.
 
  start = (page-1) * listnum
  num = totalnum - start

  Do Until Rs.eof Or num > Rs.PageSize  '페이지가 EOF 이거나 혹은 페이지크기를 넘길경우
  %>
 페이징 출력시 <%=num%>
  출력할 내용들... 좔좔좔<br>
  <%
  Rs.movenext
  loop
  num = num - 1
  rs.close
 %>
 
 하단 페이징 부분

    <% if page <> 1 then %>
     <a href ="list.asp?page=<%=page-1%>">이전페이지</a>
    <% else %>
     <a href ="ist.asp?page=<%=page%>">이전페이지</a>
    <% end if %>
   
    <%for i = 1 to totalpage %>
    <a href ="list.asp?page=<%=i%>"><%=i%></a>
    <% next %>
   
    <% if(Cint(page) <> Cint(totalpage)) then %>
     <a href ="list.asp?page=<%=page+1%>">다음페이지</a>
    <% else %>
     <a href ="list.asp?page=<%=page%>">다음페이지</a>
    <% end if %>


이전 1 다음