ASP/ASP My Library

ASP용 String.Format() 함수, eregi_replace() 함수, SQL 인젝션 방지 함수

denisOh 2013. 10. 1. 00:06

개요

쿼리문 작성 어떻게 하나요?

그냥 막코딩 하면 되지요~~

가독성 따윈 필요 없으니

", name=" + name + ", nick=" +

이런 식으로 해도 되지요.

열맞추고 줄맞추고 해서 가독성 높일 수도 있습니다.

저도 전에 그렇게 했었어요.

 

하지만 잠깐 시간을 내어 아래 함수 사용법을 익히면,

가독성이 높은 쿼리문을 작성 할 수 있습니다.

가독성이 높아지면 실수할 확률이 적어지고, 디버깅 횟수가 줄게 되어

결과적으로 빠른 코딩이 가능해 집니다.

 

가장 중요한 함수는 가독성을 위한 stringFormat()과 보안을 위한 toDbString() 입니다.

 

 

함수들

<%

'닷넷의 String.Format을 흉내낸 함수 입니다.
Function stringFormat(sVal, aArgs)
    Dim i
    For i=0 To UBound(aArgs)
        sVal = Replace(sVal,"{" & CStr(i) & "}",aArgs(i))
    Next
    StringFormat = sVal
End Function

'아래와 같이 결과를 변수에 무조건 대입해야 합니다. 아니면 문법 오류가 발생 합니다.
'Dim result
'result = stringFormat("this {0} a tes{1} string containing {2} values", _
'             Array("is", "t", "some"))

 


'PHP의 eregi_replace 를 흉내낸 함수 입니다.
Function eregi_replace(pattern, replace, text)
    Dim eregObj
    Set eregObj = New RegExp
    eregObj.Pattern = pattern   '패턴 설정
    eregObj.IgnoreCase = True   '대소문자 구분 여부
    eregObj.Global = True       '전체 문서에서 검색
    eregi_replace = eregObj.Replace(text, replace): 'Replace String
End Function

 


'문자열을 쿼테이션으로 감싸주는 것을 기본으로 하여,
'사용자가 입력한 ' 에 대한 지원과
'SQL 인젝션 방지 그리고 자바스크립트 삽입 방지를 지원합니다.
Function toDbString(str)
    str = Replace(str, "'", "''")
    str = "'" + str + "'"
    str = eregi_replace("<script", "< script", str)
    str = eregi_replace("</script", "< /script", str)
    toDbString = str
End Function
%>

 

 

사용법

<%

    query = stringFormat("update bbsCon set title={0}, content={1}, ip={2} where id={3}", _
                            Array(toDbString(title), _
                                  toDbString(content), _
                                  toDbString(Request.ServerVariables("REMOTE_ADDR")), _
                                  id _
                            ) _
            )

    query = stringFormat("insert into bbsCon (title, content, nick, ip) values ({0}, {1}, {2}, {3})", _
                            Array(toDbString(title), _
                                  toDbString(content), _
                                  toDbString(Session("nick")), _
                                  toDbString(Request.ServerVariables("REMOTE_ADDR")) _
                            ) _
            )

 

    query = stringFormat("delete from bbsCon where id={0}", _
                            Array(id))

 

    query = stringFormat("select id, dtReg, title, nick, readCnt, ip from bbsCon order by id desc", _
                            Array())

 

    query = stringFormat("select * from bbsCon where id={0}", _
                            Array(id))
%>