프로그램/ASP

request 을 받을 때 sql injection 처리

네오류이 2021. 1. 14. 16:04
728x90
반응형

오늘은 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, """", "&quot;")

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, """", "&quot;")

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, "&quot;", """")

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처리

728x90
반응형