▶ 뭉충닷컴
 
mungchung.com
Site Search
My Space
주절주절...
공부방
쥔장소개
Board
자유게시판
유용한 정보
자료실
Programming
강좌 & Articles
Spring 3.0
프로그래밍 Tip
   -ASP
   -JSP
   -PHP
   -JavaScript
   -HTML
   -Java
   -Database
   -Crystal Report
   -Visual Basic
   -Oracle
   -이클립스
   -리눅스
   -기타
Windows API (VB)
Spread Sheet 7.0
컴퓨터활용 Tip
Other things
StarCraft 전략
StarCraft 문서
김용(金庸)
Son Q & Dieda
정리해서 올려야하는데..귀찮아서 일단 문서 일부분에서 발췌한것만 올린다.
참고로 이 보안관련 문서는 대외비라서 일부분만 올린것인데 이 문서에는
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.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 '객체 초기화
%>

댓글 '3'

이쁜차원이

2009.06.18 15:03:53
*.192.169.242

안녕하세요^- ^ 가능하다면 jsp 용으로 자료 부탁드려도 될까요..?  comtagirl@naver.com

문은미

2009.11.12 11:58:12
*.137.4.117

안녕하세요
저는 asp,php ,jsp 자료부탁드려도 될런지요?~~
blmjk@naver.com

뭉충닷컴

2009.11.13 12:06:40
*.130.16.141

안녕하세요. 쥔장입니다.
댓글로 자료요청하시는 분들이 계실줄 몰랐네요 -_-
앞으로 자료요청 하시려면 자유게시판에 남겨주세요.

(댓글을 지속적으로 모니터링하고 있는것이 아니라서...댓글 달린것 지금에서야 봤습니다 -_-)
문서 첨부 제한 : 0Byte/ 2.00MB
파일 제한 크기 : 2.00MB (허용 확장자 : *.*)
List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 기타 질문글은 자유게시판에 작성해 주세요. 뭉충닷컴 2005-09-24 81797
316 JAVA 톰캣(tomcat) 4.x 버젼에서 한글/UTF-8 사용하기 file 뭉충닷컴 2008-01-28 6556
315 Oracle 오라클 9i SQL Reference 뭉충닷컴 2008-01-23 4668
314 Oracle 오라클 문자열 관련 함수 뭉충닷컴 2008-01-23 10448
313 Script HTML and DHTML Reference 뭉충닷컴 2008-01-22 4512
312 Oracle 엑셀에서 오라클의 데이터 연동하는 Add-in 프로그램 file 뭉충닷컴 2008-01-22 6470
311 JAVA RMI, IIOP에 대한 설명 뭉충닷컴 2008-01-22 5077
310 JAVA 자바의 직렬화(Serializable) 설명 뭉충닷컴 2008-01-18 5046
309 Script Js로 만든 DOM Inspector 랍니다 뭉충닷컴 2008-01-04 4371
308 Script HTML 에서 엑셀 그래프 이용하기 (OWC 이용) 뭉충닷컴 2007-12-19 5908
307 ASP 특정 단어가 들어있는 파일들 뽑아오기 file 뭉충닷컴 2007-12-13 9297
306 HTML CSS의 Media 사용하기 (style) 뭉충닷컴 2007-12-12 6423
305 DataBase MS SQL 2000/2005 유용한 명령어 모음 뭉충닷컴 2007-12-11 9233
304 HTML 실전 웹 표준 가이드 문서 file 뭉충닷컴 2007-12-10 4999
303 HTML 셀렉트박스 오른쪽 정렬하기 뭉충닷컴 2007-12-06 6864
302 Script innerHTML에 스크립트를 삽입 뭉충닷컴 2007-12-06 6235
301 Script 객체지향적 고급 자바스크립트 개발을 위한 가이드 뭉충닷컴 2007-12-06 4650
300 HTML 웹 표준으로 작성되었는지 검사해주는 사이트 뭉충닷컴 2007-12-06 5078
299 DataBase with (nolock) 를 한방에 해결하기 뭉충닷컴 2007-12-04 7337
298 Script 2000개 체크박스 전체체크 시간비교 file 뭉충닷컴 2007-12-03 4310
297 ASP 파일 명세서 관리 - 1.0 file 뭉충닷컴 2007-11-24 7162
296 기타 플래쉬에서 텍스트나 XML 파일 읽어올 때 2줄로 보이는 현상 뭉충닷컴 2007-11-20 5039
295 Script JSON 표기법을 이용한 자바스크립트 클래스 사용하기 뭉충닷컴 2007-11-19 6098
294 Script TEXTAREA 커서부분에 문자 삽입 뭉충닷컴 2007-11-19 6734
293 Script escape, encodeURI, encodeURIComponent 비교 뭉충닷컴 2007-11-15 5825
292 HTML 보안에 위험을 주는 태그들 뭉충닷컴 2007-11-12 5255
291 HTML 웹에서 엑셀로 저장시에 엑셀수식 사용하기 file 뭉충닷컴 2007-10-18 7481
290 VB VB의 Choose 함수 뭉충닷컴 2007-10-10 6743
289 Script 폼 컨트롤들 중에서 onchang 이벤트 발생한적 있는지 검사하는 스크립트 [1] 뭉충닷컴 2007-09-23 4375
288 Script form의 enctype를 javascript로 변경하기 뭉충닷컴 2007-09-20 5366
287 기타 스팸글 등록 방지하는 간단한 방법 [4] 뭉충닷컴 2007-09-02 7018
286 JSP BLOB으로 저장된 사진정보 파일로 받기 이영진 2007-08-31 11623
285 JSP classes12와 ojdbc14의 CLOB 처리 비교 이영진 2007-08-30 10492
284 JSP classes12와 ojdbc14 connection 선언시 차이 [1] 이영진 2007-08-30 6853
283 Script 영어 오타를 한글로 변환 뭉충닷컴 2007-08-25 6618
282 ASP ASP 에서 ajax 를 사용할 경우 ..인코딩 문제 file 뭉충닷컴 2007-08-25 10601
281 ASP 함수의 인자(파라미터)에 함수를 넘겨줘서 실행하기 뭉충닷컴 2007-08-22 9798
280 HTML HTML, XHTML, XML 에 대한 링크들 뭉충닷컴 2007-08-21 4901
279 ASP asp 페이지를 유니코드(unicode)로 출력하기 뭉충닷컴 2007-07-18 9373
278 HTML html 배경이 스크롤 되어도 항상 위치가 고정되도록 뭉충닷컴 2007-07-09 7296
277 DataBase SQL Server 2000 나만의 노하우 & 팁 뭉충닷컴 2007-06-18 6686
276 Script HTML 태그의 특정부분 컨트롤 초기화 하기 (vbscript) file [2] 뭉충닷컴 2007-06-15 6331
275 HTML TDC 페이지에서 mshtml.dll 관련 오류가 뜰경우 뭉충닷컴 2007-06-14 5596
274 ASP ASP 응용 프로그램의 문자열 처리 성능 향상 - 필독! [5] 뭉충닷컴 2007-06-14 7000
» ASP ASP 해킹 방지 보안 방법(injection, cross site scripting...) [3] 뭉충닷컴 2007-06-13 12981
272 ASP ASP 정규식을 이용하여 문자열 패턴 적용하기 뭉충닷컴 2007-06-13 14012
271 ASP 테이블 정의서 2.5 - 미완성 file 뭉충닷컴 2007-06-08 8995
270 Script 웹페이지 크기 조절 못하게 막기 뭉충닷컴 2007-06-07 5777
269 Script 자바스크립트 계산기 - 윈도우 계산기랑 거의 유사한 모양 file 뭉충닷컴 2007-05-23 4518
268 VB VB에서 HTML의 스크립트 함수 호출및 Active X 호출 [1] 뭉충닷컴 2007-05-21 11533
267 Script 자바스크립트로 마우스휠 이용하기(onmousewheel) 뭉충닷컴 2007-05-17 5004
266 Script html 객체의 style을 자바스크립트로 다루기 (cssText이용) 뭉충닷컴 2007-05-17 4522
265 ASP 자동가입방지 그림문자 생성기 (CAPTCHA) [1] 뭉충닷컴 2007-05-16 17101
264 ASP URL에서 특수문자 오류나는 것 처리하기(escape, unescape) [2] 뭉충닷컴 2007-05-02 11695
263 Script 자바스크립트 배열관련 메서드들 뭉충닷컴 2007-04-19 6042
262 Crystal R 크리스탈 리포트에선 잘 나오는데 VB에서는 실행이 안되는 경우 뭉충닷컴 2007-04-13 7786
261 Script 자바스크립트 문자열 관련 객체의 메서드들 뭉충닷컴 2007-04-12 4404
260 ASP delete, update, insert의 xx row(s) affected 결과값 받아오기 뭉충닷컴 2007-04-11 8479
259 HTML A4사이즈를 픽셀로 환산하면 뭉충닷컴 2007-04-08 10278
258 JSP java, infix를 postfix로 만들기 file 뭉충닷컴 2007-04-05 7121
257 DataBase MS-SQL 2000의 쿼리분석기 유용한 단축키 [2] 뭉충닷컴 2007-04-03 8771