세이박스

[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 %>


제로보드 이미지 한글 파일명 업로드 깨짐 엑박 되는 현상

웹프로그램
제로보드에서 이미지 업로드시 파일명이 한글로 되어 있는경우 엑박 (깨짐) 처리 되는경우를 방지 하기 위해 아예 파일명을 숫자로 변경해버리는 방법입니다.
 
수정파일 : write_ok.php
 
수정위치 :
이미지 파일이 업로드 2개까지 가능하니 두군데 적용.
 
 
// 디렉토리를 검사함 <=== 검색 해보시면 두군데가 있을겁니다.
 
   // 디렉토리를 검사함
   if(!is_dir("data/".$id)) {
    mkdir("data/".$id,0777);
    @chmod("data/".$id,0706);
   }
 
위 코드 다음 줄에 아래와 같이 등록해주시면 됩니다.
 
1. 첫번째 위치
 
   // 디렉토리를 검사함
   if(!is_dir("data/".$id)) {
    mkdir("data/".$id,0777);
    @chmod("data/".$id,0706);
   }
 
   // 파일명이 한글인 경우 날짜로 변환
   $temp=explode(".",$s_file_name1);
   $file_name_1=$temp[0];
   for($i=0;$i<strlen($file_name_1);$i++) {
    if(ord($file_name_1[$i])>0x80) {
     $temp1=explode(".",$s_file_name1);
     $s_file_name1 = $reg_date."1.".$temp1[1];
     break;
    }      
   }
 
2. 두번째 위치
 
   // 디렉토리를 검사함
   if(!is_dir("data/".$id)) {
    mkdir("data/".$id,0777);
    @chmod("data/".$id,0706);
   }
   
   $temp=explode(".",$s_file_name2);
   $file_name_2 = $temp[0];
   for($i=0;$i<strlen($file_name_2);$i++) {
    if(ord($file_name_2[$i])>0x80) {
     $temp=explode(".",$s_file_name2);
     $s_file_name2 = $reg_date."2.".$temp[1];
     break;
    }      
   }

session_destroy() 오류

웹프로그램
질문:
session_destroy() 을 쓰면.. 아래와 같은 에러가 발생합니다...세션두 안 묵구여???

Warning: session_destroy() [function.session-destroy]: Trying to destroy uninitialized session in
 
답변:
위와 같은 경우 대부분 session_destroy(); 함수 사용전 session_start(); 빠트린 경우가 대부분 입니다.
 
참고:
session_destroy() : 모든 session data를 파괴
session_unregister("세션명") : 특정 세션만 없애고자 할 때는 을 사용

자바스크립트 select 셀렉트 박스 선택한 값을 받아오기

웹프로그램

ff.bg.options[bg_frm.bg.selectedIndex].value;
ff -> 폼 이름
bg -> 셀렉트박스 이름

<script>
function bg_preview() {
 var ff = document.bg_frm;
 var url = ff.bg.options[bg_frm.bg.selectedIndex].value;
 alert(url);
}
</script>

<from name="bg_frm">
 <select name="bg" id="bg">
  <option value="1">1</option>
  <option value="2">2</option>
 </select>
</form>

CSS 텍스트(text) 관련 옵션

웹프로그램
font-size:9pt; //폰트크기
 
font-weight:bold; //폰트 볼드
 
text-align:center; //폰트 정렬 (left, center, right)
 
color:#FFFF00; //폰트컬러
 
word-spacing:5pt; //단어간 간격 조절
 
letter-spacing:7pt; //자간 조절
 
line-height:200%; //줄간격 조절
 
(%,px,pt 등등 사용가능)
이전 1 ··· 7 8 9 10 다음