2016. 1. 7. 15:32

빨간색 글자를 추가 한다.

웹에서는 세션에 따라 ARITHABORT 가 OFF로 처리되는 경우가 발생한다고 함.

정확한 원인은 확인중..


Conn.Execute "SET ARITHABORT ON"

 

Set Cmd = Server.CreateObject("ADODB.Command")

With Cmd

       .ActiveConnection   =      Conn

       .CommandText        =      "ProcName"

       .CommandType        =      adCmdStoredProc

 

       .Parameters.Append .CreateParameter("@DPart", adChar, adParamInPut, 2, DPart)

       .Parameters.Append .CreateParameter("@YY", adChar, adParamInPut, 4, YY)

       .Parameters.Append .CreateParameter("@txtName", adVarChar, adParamInPut, 50, txtName)

 

       Set Rs = .Execute

       If Not Rs.Eof Then

             Dim Record : Record = Rs.GetRows()

       End If

       Rs.Close : Set Rs = Nothing

End With

Set Cmd = Nothing

 

Posted by 팔개
2015. 12. 24. 15:20

1. 버젼에 맞게 AccessDatabaseEngine.exe를 설치한다.

=> OS버젼이 64bit일 경우 AccessDatabaseEngine_X64.exe를 설치한다.


2. sp_configure를 이용하여 아래의 옵션을 활성화 한다.


sp_configure 'show advanced options', 1;

GO

RECONFIGURE;

GO

sp_configure 'Ad Hoc Distributed Queries', 1;

GO


3. 엑셀다운로드 할 쿼리를 프로시져로 만든다.

-- OLEDB.4.0SQL2000 버젼임

CREATE PROC EXCEL

       @Path        VARCHAR(100)

AS

       DECLARE @SQL NVARCHAR(4000)

 

       SET @SQL = '

       INSERT INTO

       OPENDATASOURCE(''Microsoft.Jet.OLEDB.4.0'',''Data Source='+@Path+';Extended Properties=EXCEL 5.0'')...sheet1$

       (goodscode, goodsname, unit, incost, salecost)

       SELECT TOP 10 go_goodscode, go_goodsname, go_unit, gc_incost, gc_salecost

       FROM Goods_TB

       JOIN GoodsCost_TB ON gc_goodscode = go_goodscode

       '

       EXEC SP_EXECUTESQL @SQL

 

EXEC EXCEL 'D:\new\excelTest\goods.xls'



4. 원본엑셀파일을 만든후 원본을 가지고, 해당위치로 복사한다.

<%

fileCreate.asp

Set Fso = Server.CreateObject("Scripting.FileSystemObject")

File = "D:\new\excelTest\goods.xls"

If Fso.FileExists(File) then

  Fso.DeleteFile File                          ' 기존파일삭제

End If


' 원본파일을 해당위치로 복사한다(왜, 엑셀은 DELETE이 안됨)

Fso.CopyFile "D:\goods.xls","D:\new\excelTest\goods.xls"

' 프로시져 실행

Set Rs = Conn.Execute("dbo.EXCEL"


' 엑셀다운받기 

Response.redirect "fileDown.asp?strFileName=goods.xls"

%>



<%

fileDown.asp

문서정의타입을알수없음으로하게되면무조건다운로드시킨다.

다운로드시킬파일을정의한다.

Dim strFileName : strFileName = Request("strFileName")

 

Response.ContentType = "application/unknown"

Response.AddHeader "Content-Disposition","attachment; filename="&strFileName

 

‘ ADODB.Stream으로스트림을읽는다.

Set objStream = Server.CreateObject("ADODB.Stream")

objStream.Open

objStream.Type = 1

objStream.LoadFromFile "D:\new\excelTest\"&strFileName

strFile = objStream.Read

Response.BinaryWrite strFile

Set objStream = Nothing

%>

'ASP' 카테고리의 다른 글

웹과 쿼리분석기의 성능이 다를때..  (0) 2016.01.07
asp에서 euc-kr / utf-8 설정 상단 구문  (0) 2015.11.01
SQLInjection 방어하기  (0) 2015.10.29
정규식을 이용한 HTML 태그제거 함수  (0) 2015.03.19
CSRF 방어하기  (0) 2014.01.05
Posted by 팔개
2015. 11. 1. 12:29
<% @Language="VBScript" CODEPAGE="949" %>
<%
Response.CharSet="euc-kr"
Session.codepage="949"
Response.codepage="949"
Response.ContentType="text/html;charset=euc-kr"
%>



<%@Language="VBScript" CODEPAGE="65001" %>
<%
Response.CharSet="utf-8"
Session.codepage="65001"
Response.codepage="65001"
Response.ContentType="text/html;charset=utf-8"
%> 


Posted by 팔개
2015. 10. 29. 19:01

Sub f_injection(query_string)

 

   Dim InjectAttack : InjectAttack = False

   Dim strSource, strTemp, strResult, strchr

   Dim lngPos, AddNum, IFKor

   strSource = Replace(query_string, "+", " ")

   

For lngPos = 1 To Len(strSource)                                            ' 쿼리문을 디코딩한다.

        AddNum  = 2

        strTemp = Mid(strSource, lngPos, 1)

        If strTemp = "%" Then

            If lngPos + AddNum < Len(strSource) + 1 Then

                strchr = CInt("&H" & Mid(strSource, lngPos + 1, AddNum))

                If strchr > 130 Then

                    AddNum = 5

                    IFKor = Mid(strSource, lngPos + 1, AddNum)

                    IFKor = Replace(IFKor, "%", "")

                    strchr = CInt("&H" & IFKor )

                End If

                strResult = strResult & Chr(strchr)

                lngPos    = lngPos + AddNum

            End If

        Else

            strResult = strResult & strTemp

        End If

    Next

 

    Dim wordFile, injectionTxt

    Set wordFile = objFso.OpenTextFile("F:injection_word.txt",1)            ' 공격자가 입력할 예상단어를 txt에 저장한 후 불러온다.

        injectionTxt = wordFile.readAll

        wordFile.Close

    Set wordFile = Nothing

 

    strResult = LCase(strResult)

    injection_filter_arr = Split(Replace(injectionTxt," ",""), ",")

 injection_filter_cnt = Ubound(injection_filter_arr)

 

    For j = 0 To injection_filter_cnt

      injection_filter = Replace(injection_filter_arr(j),Chr(13)&Chr(10),"")      ' 메모장 Enter값 치환

      If InStr( strResult, injection_filter ) > 0 Then

        InjectAttack = True

        Exit For

      End If

    Next

 

    If (InjectAttack = True) Then                                                  ' 쿼리내용을 저장하고 하단부터 출력하지 않는다.

      adoConn.Execute "쿼리문저장하기"

      Response.End

    End If

 

End Sub

 

Call f_injection(Request.ServerVariables("PATH_INFO")&"?"&Request.QueryString)

Posted by 팔개
2015. 3. 19. 14:12

출처 : http://www.webmadang.net/develop/develop.do?action=read&boardid=1001&page=1&seq=82


내용 : 메인화면에 게시판글 내용을 나타내고자 할 때 HTML태그까지 나타날 경우 화면이 깨지는 현상이 있어 한글만 출력 하도록 한다.


Function stripTags(HTMLstring)

        Set RegularExpressionObject = New RegExp

       With RegularExpressionObject

                            .Pattern = "<[^>]+>"

                            .IgnoreCase = True

                            .Global = True

       End With

       stripTags = RegularExpressionObject.Replace(HTMLstring, "")

       Set RegularExpressionObject = nothing

End Function


Dim content : content = "<html><body>HTML 태그정리후본문내용만출력</body></html>"


<%=stripTags(content)%>

'ASP' 카테고리의 다른 글

엑셀다운로드 복잡한 방법(효과적이진 못하나 괜찮다)  (0) 2015.12.24
asp에서 euc-kr / utf-8 설정 상단 구문  (0) 2015.11.01
SQLInjection 방어하기  (0) 2015.10.29
CSRF 방어하기  (0) 2014.01.05
Parameter 사용  (0) 2014.01.05
Posted by 팔개
2014. 1. 5. 20:59
이전(브라우저가 탭복제가 안되던 시절)에는 토큰방식으로 처리하여도 탭복제 기능이 없었기 때문에 토큰방식이 가능하였으나,
현재는 탭복제 또는 크롬에서 "새 탭에서보기"를 한후 필요한 부분만 편집하여 사용하면 문제없이 글 등록이 된다.

그리하여 현재의 페이지와 입력받는 페이지의 도메인을 비교하면서 동일한 폴더에 있는 파일들인지 체크하여 틀릴경우 CSRF공격을 간주하여 처리한다.

Function Host_Fun(Host)

Host = Replace(Host, "http://", "")

       Host = Replace(Host, "https://", "")

       Host_Fun = Host

End Function

 

 

'' CSRF 방어하기

Sub CSRF_Token

       ' 현재파일의 폴더까지의 위치확인

       InStrLen = InStrRev(Request.ServerVariables("http_host")&Request.ServerVariables("http_url"),"/")

       ' 글을 입력받는 URI 확인(http:// 제외)

       http_referer = Left(Host_Fun(Request.ServerVariables("http_referer")), InStrLen)

' 글을 입력하는 페이지

now_url      = Left(Request.ServerVariables("http_host")&Request.ServerVariables("http_url"), InStrLen)                 

       If (  http_referer <> now_url  ) Then

             Response.Write "<script>"&VbCrLf

             Response.Write "<!--"&VbCrLf

             Response.Write "window.alert('잘못된경로로접근하셨습니다!');"&VbCrLf

             Response.Write "window.history.back();"&VbCrLf

             Response.Write "//-->"&VbCrLf

             Response.Write "</script>"&VbCrLf

             Response.End

       End If

End Sub

 

' 모든페이지 글등록 처리

If InStr(Request.ServerVariables("http_url"), "_ok") > 0 Then

Call CSRF_Token

End If

 

Posted by 팔개
2014. 1. 5. 20:58
With Cmd
.ActiveConnection = adoConn
.CommandText = "SELECT * FROM Table"
.CommandType = adCmdText

.Parameters.Append .CreateParameter("@startdate", adDBTime, adParamInPut, 8, startdate)
.Parameters.Append .CreateParameter("@TCount", adSmallInt, adParamOutPut, 0) ' 검색 결과 총갯수

.Parameters("@TCount") = 0
.Execute , , adExecuteNoRecords

Dim TotCount : TotCount = .Parameters("@TCount")

Set Rs = .Execute
If Not Rs.Eof Then
Dim Record : Record = Rs.GetRows()
End If
Rs.Close : Set Rs = Nothing
End With


Posted by 팔개