sql인젝션 공격에 가장 좋은 방법은 소스부분을 수정하는 것이라고들 합니다.
그래서 asp소스를 사용하시는 분들은 참고하시기 바랍니다.
아래소스를 인크루드하시고 각페이지 상단에 삽입하시면 될겁니다.
예)회원로그인 confirm페이지를 member_confirm.asp라고 가정하고
아래 소스를 sql_injection.asp라고 하겠습니다. 이 파일은 루트에 존재한다고 가정합니다.
-------------------- sql_injection.asp ----------------------
<%
Function cutstringbyte(getstring, limitbyte)
Dim strlen, i, j, returnstring, totalbyte
strlen = Len(getstring)
returnstring = ""
totalbyte = 0
j = 1
For i=1 To strlen
If Asc(Mid(getstring, j, 1)) < 0 Then
totalbyte = totalbyte + 2
Else
totalbyte = totalbyte + 1
End If
If Int(totalbyte) <= Int(limitbyte) Then
returnstring = returnstring + Mid(getstring, j, 1)
Else
Exit For
End If
j = j + 1
Next
cutstringbyte = returnstring
End Function
function myrequest(getstring, cutbyte, securitylevel)
dim str_myrequest, str_lcase
str_myrequest = request(getstring)
if not(str_myrequest = "" or isnull(str_myrequest)) then
cutbyte = int(cutbyte)
securitylevel = int(securitylevel)
if securitylevel > 0 then
'level1
str_myrequest = replace(str_myrequest,"'","''")
str_myrequest = replace(str_myrequest,";","''")
str_myrequest = replace(str_myrequest,":","''")
str_myrequest = replace(str_myrequest,"--","''")
str_myrequest = replace(str_myrequest,"/*","''")
str_myrequest = replace(str_myrequest,"*/","''")
if securitylevel > 1 then
'level2
str_lcase = lcase(str_myrequest)
str_lcase = replace(str_lcase, "exec", "")
str_lcase = replace(str_lcase, "drop", "")
str_lcase = replace(str_lcase, "update", "")
str_lcase = replace(str_lcase, "delete", "")
str_lcase = replace(str_lcase, "select", "")
str_lcase = replace(str_lcase, "insert", "")
str_lcase = replace(str_lcase, "create", "")
str_lcase = replace(str_lcase, "union", "")
str_lcase = replace(str_lcase, "sp_", "")
str_lcase = replace(str_lcase, "xp_", "")
if len(str_lcase) <> len(str_myrequest) then
str_myrequest = str_lcase
end if
end if
end if
if int(cutbyte) <> 0 then
str_myrequest = cutstringbyte(str_myrequest, cutbyte)
end if
end if
myrequest = str_myrequest
end function
%>
------------------- member_confirm.asp --------------------
<!--#include virtual="/sql_injection.asp"//-->
<%
userid = myrequest("id",12,2)
pass = myrequest("pass",12,2)
''위에 12숫자는 최대 지정하는 db 바이트를 의미하고 2는 보안레벨을 의미합니다.
리쿼스트값을 위와 같이 하시면 됩니다.
%>
위 소스는 제가 인터넷을 서핑하면서 몇개소스를 조금 변형해서 사용한겁니다.
궁금한점 있으시면 댓글 달아주세요. 아는데까지 설명해드리죠^^
새댓글
전체보기