오늘은 asp에서 request 을 받을 때 sql injection 을 통해 사이트가 해킹이 되는 사례가 많은데 그걸 막는 방법에 대해 설명하고자 합니다.
통상 많은 방법이 있지만, 아래의 코드를 만들어 사용하고 난 다음부터는 sql injection 을 당한 적이 없었습니다.
물론 이 함수를 사용하기 전에 있었죠~~ 중국, 러시아..
만약 좀더 좋은 방법이 있으시면 가공해서 사용하시면 됩니다.
* 소스코드
// parm_value : request 값
// parm_to : 변환유형 : db, web, edit
Function CheckWordEx(parm_value, parm_to)
read_value = parm_value
if len(read_value) <= 0 or isNull(read_value) then
exit function
end if
if parm_to = "db" then
read_value = replace(read_value, "'", "''")
read_value = replace(read_value, """", """)
read_value = replace(read_value, "insert ", "i n s e r t ")
read_value = replace(read_value, "INSERT ", "i n s e r t ")
read_value = replace(read_value, "update ", "u p d a t e ")
read_value = replace(read_value, "UPDATE ", "u p d a t e ")
read_value = replace(read_value, "exec ", "e x e c ")
read_value = replace(read_value, "EXEC ", "e x e c ")
read_value = replace(read_value, "union ", "u n i o n ")
read_value = replace(read_value, "UNION ", "u n i o n ")
read_value = replace(read_value, "convert(", "c o n v e r t ( ")
read_value = replace(read_value, "CONVERT(", "c o n v e r t ( ")
read_value = f_injection(read_value) ' sql injection process , 위에꺼만 해도 되지만 한번 더 확실히 한다.
elseif parm_to = "web" then
read_value = replace(read_value, "''", "'")
read_value = replace(read_value, """", """)
read_value = replace(read_value, chr(13)&chr(10), "<br>")
elseif parm_to = "edit" then
read_value = replace(read_value, "''", "'")
read_value = replace(read_value, """, """")
end if
CheckWordEx = read_value
End Function
// injection 처리한 것을 한번 더 확인
function f_injection(query_string)
'injection_filter = "union|delete|select|update|and|variable|openrowset|drop colum|alter table|alter column|create |insert|;--|declare|exec|seq@"
injection_filter = "union |delete |update |variable |openrowset |drop colum |alter table |alter column |create |insert |;--|declare |exec |seq@"
ret_val = query_string
injection_filter_arr = split(injection_filter, "|")
injection_filter_cnt = ubound(injection_filter_arr)
for j=0 to injection_filter_cnt
if instr(1,query_string,injection_filter_arr(j), 1) > 0 then
ret_val = "injection content"
exit for
end if
next
f_injection = ret_val
end function
* 사용법
' request 받을 때 사용, 늘 이것만 사용합니다.
aaa = CheckWordEx(request("parm"), "db")
' request 받은 내용을 text 나 textarea 넣을 때, 한번 더 원래 상태로 돌려야 한다.
aaa = CheckWordEx(aaa, "edit")
저같은 경우는 통상 이정도로 사용합니다.
많이많이 사용해 주세요.
#ASP #injection #request #SQLInjection #sqlinjection처리
'프로그램 > ASP' 카테고리의 다른 글
말줄임. 글자자르기 ... (0) | 2021.01.14 |
---|---|
요일을 확인하는 함수 (0) | 2021.01.14 |
하나의 필드를 쿼리해서 받을 때 쉽게 쿼리 사용하기 (0) | 2021.01.14 |
한글 금액 표기 방법 (0) | 2021.01.14 |
문자열의 형태(한글,숫자,영문 등)을 확인하는 함수 (1) | 2021.01.14 |