'asp'에 해당되는 글 3건

  1. 2023.01.11 classic asp ADO parameter 1
  2. 2022.08.08 javascript 오버로드로 함수 만들기
  3. 2015.10.13 SQL Injection 확인 팁

반응형

                .Parameters.Append .CreateParameter("DA_NAME", adVarChar, adParamInput, 100, DA_NAME)

                .Parameters.Append .CreateParameter("DA_LAT", adDouble, adParamInput, , DA_LAT)

                .Parameters.Append .CreateParameter("DA_LNG", adDouble, adParamInput, , DA_LNG)

 

adEmpty 0 No value
adSmallInt 2 A 2-byte signed integer.
adInteger 3 A 4-byte signed integer.
adSingle 4 A single-precision floating-point value.
adDouble 5 A double-precision floating-point value.
adCurrency 6 A currency value
adDate 7 The number of days since December 30, 1899 + the fraction of a day.
adBSTR 8 A null-terminated character string.
adIDispatch 9 A pointer to an IDispatch interface on a COM object. Note: Currently not supported by ADO.
adError 10 A 32-bit error code
adBoolean 11 A boolean value.
adVariant 12 An Automation Variant. Note: Currently not supported by ADO.
adIUnknown 13 A pointer to an IUnknown interface on a COM object. Note: Currently not supported by ADO.
adDecimal 14 An exact numeric value with a fixed precision and scale.
adTinyInt 16 A 1-byte signed integer.
adUnsignedTinyInt 17 A 1-byte unsigned integer.
adUnsignedSmallInt 18 A 2-byte unsigned integer.
adUnsignedInt 19 A 4-byte unsigned integer.
adBigInt 20 An 8-byte signed integer.
adUnsignedBigInt 21 An 8-byte unsigned integer.
adFileTime 64 The number of 100-nanosecond intervals since January 1,1601
adGUID 72 A globally unique identifier (GUID)
adBinary 128 A binary value.
adChar 129 A string value.
adWChar 130 A null-terminated Unicode character string.
adNumeric 131 An exact numeric value with a fixed precision and scale.
adUserDefined 132 A user-defined variable.
adDBDate 133 A date value (yyyymmdd).
adDBTime 134 A time value (hhmmss).
adDBTimeStamp 135 A date/time stamp (yyyymmddhhmmss plus a fraction in billionths).
adChapter 136 A 4-byte chapter value that identifies rows in a child rowset
adPropVariant 138 An Automation PROPVARIANT.
adVarNumeric 139 A numeric value (Parameter object only).
adVarChar 200 A string value (Parameter object only).
adLongVarChar 201 A long string value.
adVarWChar 202 A null-terminated Unicode character string.
adLongVarWChar 203 A long null-terminated Unicode string value.
adVarBinary 204 A binary value (Parameter object only).
adLongVarBinary 205 A long binary value.
AdArray 0x2000 A flag value combined with another data type constant. Indicates an array of that other data type.
반응형
Posted by Hippalus
,

반응형

망할 azure PaaS 환경의 클라우드 이관 작업을 진행하려다 보니 관련 부서에서 날짜 관련해서 제약사항이 생긴다란 이야기를 듣고 생각해보니 기존 소스들이 이관되면 엉망이 되겠다 싶어 미리 준비해보았다.

당장 javascript로 만들어진 new Date()만 보더라도 한국 시간과 미국 시간의 차이로 임계영역에 다다르면 날짜가 서로 꼬이게 될 것이란건 너무나 자명했다.

현재 서버호스팅 환경에선 new Date()시 2022-08-08 19:00:00이던게 
미국과 한국은 13시간의 차가 있으므로 azure PaaS 클라우드 환경에선 2022-08-09 20:00:00으로 보여지게 될테니 말이다. 

그리하여 기존의 new Date()대신 new AzureDate()를 호출하면 해당 함수내에서 알아서 시간계산을 해서 값을 돌려준다면 모든게 해결될 듯 보였다.
어차피 getFullYear(), getMonth(), getDate() 등의 함수는 new Date()로 받아온 시간객체를 통해 얻는 행위이므로 AzureDate()만 만들다면 이 모든건 소스 수정 없이 우아하게 처리 될 것이다.

아래가 그 결과물이다. 
    function AzureDate() {
        var dt;
        
        if (arguments.length == 0) {
            dt = new Date();
        } else if (arguments.length == 1) {
            dt = new Date(arguments[0]);
        }

        dt.setHours(dt.getHours() + 13);        
        
        return dt;
    }

특이한 부분은 arguments.length라는 부분이다.
new Date(), new Date("2022-08-08") 이렇게 인자를 넘겨서 객체를 생성하기 때문에 내가 만든 javascript 함수도 이에 대응할 필요가 있었다.

하지만 우리의 자바스크립트는 오버로딩을 지원하지 않는다.
https://www.geeksforgeeks.org/function-overloading-in-javascript/
Unlike the other programming languages, JavaScript Does not support Function Overloading
Here is a small code which shows that JavaScript does not support Function Overloading.

 

Function Overloading in JavaScript - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

따라서 arguments.length로 분기해준다면 훌륭하게 잘 처리가 가능하다.

다 만들어 놓고 azure cloud에 올려 테스트해봤더니 -_-
시간차가 벌어지지 않더라
생각해보니 javascript는 로컬이잖 -_-

내친김에 classic asp로도 만들어봤는데 마찬가지로 시간차가 없었단 -_-

    function AzureDate() 
        Dim dateVal
        dateVal = dateadd("h", 13, now())
        
        AzureDate = year(dateVal) & "-" & Right(String(2, "0") & month(dateVal), 2) & "-" & Right(String(2, "0") & day(dateVal), 2)
    end function

    function AzureNow() 
        Dim dateVal
        dateVal = dateadd("h", 13, now())
        AzureNow = dateVal
    end function


한국 서버에서 돌린 결과 2022-08-08 오후 7:30:00
8/8/2022 7:30:00 PM
azure Cloud서버가 한국에 있어서 그런건지...
이건 좀 이상하므로 설치한 담당자에게 물어보는 중

반응형
Posted by Hippalus
,

반응형


어느순간 홈페이지를 보면 이상한 문자들이 잔뜩 보여지며 홈페이지가 정상 동작을 하지 않음을 발견하게 됩니다.

DB에서 쿼리를 날려보면 이런 문자열이 잔뜩 들어가있습니다.


SQL Injection공격에 당한 상황입니다.


SQL Injection에 당하는 이유는 주로 웹프로그램 개발을 안일한 생각으로 동적쿼리를 사용하여 개발하였기 때문입니다.

동적쿼리라 함은 쿼리를 날릴때 스토어드 프로시저나 정적쿼리(Parameter)가 아닌 문자열을 연결하여 쿼리를 완성하는 쉽지만 위험한 개발 방식으로 다음과 같습니다.

strSqr = "select * from member_tbl where userid = '" & testid & "'"



SQL Injection 해킹(사실 해킹 수준급도 아님)을 받게 되면 첫째로 복구할 데이터를 확인해야 합니다.

그러기 위해선 어떤 테이블이 해킹 당했는지 알아내야 하므로 이때 사용되는 쿼리입니다.

단순 확인과 함께 임시 테이블에 넣어 보다 편리하게 확인이 가능합니다.


먼저 테이블부터 생성합니다.

CREATE TABLE [dbo].[totallog_table](

[db_name] [varchar](50) NOT NULL,

[table_name] [varchar](1000) NOT NULL,

[field_name] [varchar](1000) NOT NULL,

[log_data] [text] NULL

) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]


그럼 아래와 같은 테이블이 생성됩니다.


log_data만 널 허용필드입니다.



다음은 해킹된 테이블을 찾는 스크립트입니다.

sysobject와 syscolumns테이블을 이용해 해당 데이터베이스에 존재하는 모든 필드들을 검사하는 스크릅트입니다.

dbname만 자신이 사용중인 db의 이름으로 바꿔주면 됩니다.


DECLARE @TABLENAME varchar(255), @COLUMNNAME varchar(255);


DECLARE Table_Cursor CURSOR FOR


SELECT 

a.name, b.name

FROM 

sysobjects a, syscolumns b

WHERE 

a.id = b.id AND a.xtype = 'u' AND

(b.xtype = 99 OR b.xtype = 35 OR b.xtype = 231 OR b.xtype = 167);


OPEN Table_Cursor;

FETCH NEXT FROM Table_Cursor INTO @TABLENAME, @COLUMNNAME;

WHILE (@@FETCH_STATUS = 0) BEGIN


print 'insert into dbo.INJECTIONLOG_TABLE (db_name, table_name, column_name, log_data) values (''dbname'', ''dbname.'+ @TABLENAME +''', '''+ @COLUMNNAME +''', (select top 1 ['+@COLUMNNAME+'] from '+'dbname.dbo.'+@TABLENAME+' where ['+@COLUMNNAME+'] like ''%<div style="display"%''))'


FETCH NEXT FROM Table_Cursor INTO @TABLENAME, @COLUMNNAME;

END;


CLOSE Table_Cursor;

DEALLOCATE Table_Cursor;




쿼리분석기에서 실행하고 아래 쿼리를 날리면 훼손된 레코드들을 보유한 테이블의 필드들을 확인할 수 있습니다.
select * from TotalLog_Tbl where log_data is not null



예방법
1. 쿼리는 동적 쿼리가 아닌 정적 쿼리를 사용하거나 스토어드 프로시저를 사용해야 함 (개발할때 조금 힘들어짐)
2. 웹방화벽 설치 (돈나감)
3. ASP기준 웹페이지 상단에 아래 함수를 공통 파일로 만들어 include (개편함)
For Each strRequest In Request.QueryString
  For nCnt = 1 To Request.QueryString(strRequest).Count
 Call isHack(Request.QueryString(strRequest)(nCnt))
  Next
Next


For Each strRequest In Request.Form
  For nCnt = 1 To Request.Form(strRequest).Count
 Call isHack(Request.Form(strRequest)(nCnt))
  Next
Next


Function isHack(byVal strValue)
Dim strHackDefine, strResult, nCnt 
strHackDefine = Split("insert,update,select,delete,drop,create,--, or , and ,char,script,iframe,',having,embed,object,cast,sysdatabases", ",")
strResult = trim(Lcase(strValue))
For nCnt = LBound(strHackDefine) To UBound(strHackDefine)
If InStr(strResult, strHackDefine(nCnt)) > 0 Then
If strHackDefine(nCnt) = "'" Then
strValue = Replace(strValue, "'", "`")
Elseif strResult = "kr-aed-ilovecharacter" Then

Else
Response.End
End If
End if
Next
End Function 
4. 1+2+3


반응형
Posted by Hippalus
,