sub_title
 MSSQL
제   목 SQL injection 웹에서 체크하기
작성자 수확물 등록일 2008-10-10 18:41:13 조회수 26,859
SQL injection 웹에서 체크하기

Asp구문입니다.
디비 커넥 인클루드 이전에 넘어오는 모든 변수들을 한번 체킹하면 될까 해서 만들어 봤습니다.
방심하고 있는새에 저도 당했습니다. ㅜ.ㅜ

<%
InJec_FormStr =  URLDecode(Request.Form)
InJec_QueryStr =  URLDecode(Request.querystring)

Befor_ParaChk(InJec_QueryStr)
Befor_ParaChk(InJec_FormStr)

Function Befor_ParaChk(Request_Str)

	Request_Str_Arry = Split(Request_Str,"&")
	Request_Str_Len = Ubound(Request_Str_Arry)
	
	For i = 0 To Request_Str_Len

		Request_Val_Arry = Split(Request_Str_Arry(i),"=")

		Request_Chk_Val = Request_Val_Arry(1)
	
		Request_Chk_Val = Befor_Replacer(Request_Chk_Val)
		
	Next

End Function


Function Befor_Replacer(ParaName)
	
	ReturnStr = ""

	IF IsNumeric(Trim(ParaName)) = True Then
		
		IF SGN(Trim(ParaName)) = -1 Then
			Response.Write "<script>"
			Response.Write "alert ('음수를 사용하실 수 없습니다. ! ' ) ;"
			Response.Write "history.back(-1);"
			Response.Write "</script>"
			Response.end
		Else
			ReturnStr = ParaName
		End IF

	Else
		ChkStr = 0
		'금지어체크
		IF Instr(LCase(ParaName), "select") > 0 Then ChkStr = 1 End IF
		IF Instr(LCase(ParaName),"insert") > 0 Then ChkStr = 2 End IF
		IF Instr(LCase(ParaName), "count(") > 0 Then ChkStr = 3 End IF
		IF Instr(LCase(ParaName), "drop")  > 0 Then ChkStr = 4 End IF
		IF Instr(LCase(ParaName), "update")  > 0 Then ChkStr = 5 End IF  
		IF Instr(LCase(ParaName), "truncate")  > 0 Then  ChkStr = 6  End IF
		IF Instr(LCase(ParaName), "asc(") > 0 Then  ChkStr = 7  End IF
		IF Instr(LCase(ParaName), "mid(")  > 0 Then  ChkStr = 8  End IF
		IF Instr(LCase(ParaName), "char(") > 0 Then  ChkStr = 9  End IF
		IF Instr(LCase(ParaName), "cmdshell") > 0 Then  ChkStr = 10  End IF
		IF Instr(LCase(ParaName), "execmaster") > 0 Then  ChkStr = 11  End IF
		IF Instr(LCase(ParaName), "netlocalgroupadministratThens") > 0 Then  ChkStr = 12  End 
IF
		IF Instr(LCase(ParaName), "netuser") > 0 Then  ChkStr = 13  End IF
		IF Instr(LCase(ParaName), "--") > 0 Then  ChkStr = 14  End IF
		IF Instr(LCase(ParaName), ";") > 0 Then  ChkStr = 15  End IF
		IF Instr(LCase(ParaName), "/") > 0 Then  ChkStr = 16  End IF
		IF Instr(LCase(ParaName), "*") > 0 Then  ChkStr = 17  End IF
		IF Instr(LCase(ParaName), "=") > 0 Then  ChkStr = 18  End IF
		IF Instr(LCase(ParaName), "drop")  > 0 Then  ChkStr = 19  End IF
		IF Instr(LCase(ParaName), "create") > 0 Then  ChkStr = 20  End IF
		IF Instr(LCase(ParaName), "shutdown") > 0 Then  ChkStr = 21  End IF
		IF Instr(LCase(ParaName), "kill")  > 0 Then  ChkStr = 22  End IF
		IF Instr(LCase(ParaName), "xmp") > 0 Then ChkStr = 23 End IF
		IF Instr(LCase(ParaName), "delete") > 0 Then ChkStr = 24 End IF	

		IF ChkStr <> 0 Then
		
			Response.Write "<script>"
			Response.Write "alert ('적절하지 않은 단어가 들어있습니다.\n확인 부탁 드리
겠습니다. !\nError - "&ChkStr&" ' ) ;"
			Response.Write "history.back(-1);"
			Response.Write "</script>"
			Response.end
		
		Else
			
			ReturnStr = ParaName	

		End IF

	End IF

Befor_Replacer = ReturnStr

End function

Function URLDecode(Expression)

StrSource = Replace(Expression, "+", " ")

For i = 1 To Len(StrSource)

    j = 2

    StrTemp = Mid(StrSource, i, 1)

    IF StrTemp = "%" Then

        IF i + j < Len(StrSource) + 1 Then

            StrChr = CInt("&H" & Mid(StrSource, i + 1, j))

            IF StrChr > 130 Then 

                j = 5

                IFKor = Mid(StrSource, i + 1, j)

                IFKor = Replace(IFKor, "%", "")

                StrChr = CInt("&H" & IFKor )

            End IF

            StrResult = StrResult & Chr(StrChr)

            i = i + j

        End IF

    Else

        StrResult = StrResult & StrTemp

    End IF

Next

URLDecode = StrResult

End Function 

Set dbcon = Server.CreateObject("Adodb.Connection")
dbcon.Open ("Provider=SQLOLEDB;Data Source=x.x.x.x;Initial Catalog=디비명;user ID=아이디;password=패스")
%>

일반 페이지는 이렇게 적용하면 될듯하고. 파일 업로드 페이지는 따로 적용을 해야 하겠죠




 
출처:sql.pe.kr    작성자: puhaha7321
 
0
    
 
0
        list
 
※ 짧은 댓글일수록 예의를 갖추어 작성해 주시기 바랍니다.
line
밥은먹고다니냐
2008-10-22   댓글 삭제
소스감사 어떻게 막나 고민했는데 정보감사합니다.
근데 Befor_Replacer 줄 위에 end if 하나 지워줘야 되는군요 하나더 쓰인건가봐요....
line
수확물
2008-10-22   댓글 삭제
앗 글쿤요!!! 좋은 지적 감사^^
line
reply cancel
 
번호 제목 글쓴이 추천 조회 날짜
34  인덱스를 위한 교재 추천 부탁 드립니다.   member 난모르겠 0 / 0 23399 2020-06-28
33  테이블 부하에 대해서...?   member 헨씀히포 0 / 0 23222 2019-05-24
32  MSSQL - 문자함수(len함수와 datalength 함수) 이미지   admin 웹마당넷 3 / 0 41078 2017-09-10
31  MSSQL - 백업 데이터를 다른 데이터베이스로 복원하기 이미지   admin 웹마당넷 6 / 2 29852 2015-07-05
30  MSSQL - SELECT 결과를 테이블로 만들기 이미지   admin 웹마당넷 1 / 0 27704 2015-06-26
29  기본 데이타 베이스 저장소 위치 바꾸기   member 아침마당 1 / 1 26431 2010-11-04
28  SQL Server 2008 복원시 트랜잭션 로그 백업   member 아침마당 1 / 0 26533 2010-09-25
27  SQL 인젝션 공격을 당했을 경우 인젝션 스크립트 지우는 저장 프로시저   member 아침마당 1 / 0 26075 2010-09-14
26  SQL Server 트랜잭션 로그 파일 줄이는 방법   member 아침마당 0 / 1 32446 2010-09-14
25  [MSSQL] SQL Server 2008 테이블 디자인 수정시 주의 사항   member 아침마당 1 / 0 28223 2010-08-22
24  [MSSQL] ISNULL 함수 간단 예제   member 아침마당 4 / 1 47996 2010-08-05
23  MSSQL - SELECT 와 동시에 INSERT 하기   admin 웹마당넷 14 / 3 153917 2009-02-03
22  MSSQL - IDENTITY 값 초기화 하기   admin 웹마당넷 3 / 2 63437 2009-01-27
21  MS-SQL 클러스터드 인덱스를 어떤 컬럼(들)에 생성하는 것이 유리할까?   member 마카로니 0 / 0 30011 2009-01-08
20  테이블 및 개체의 정보를 확인하기 위한 시스템 저장 프로시저(System Stored pr..   admin 웹마당넷 0 / 0 27629 2008-12-20
19  MSSQL 조인(JOIN)을 이용한 UPDATE 및 DELETE   admin 웹마당넷 5 / 0 53896 2008-11-29
18  SQL injection 웹에서 체크하기   member 수확물 0 / 0 26859 2008-10-10
17  MSSQL - CASE WHEN문   member 다자래 1 / 0 69964 2008-09-19
16  [MSSQL] 파티션 정보 검색   member 수확물 0 / 0 28701 2008-09-08
15  [MSSQL] DDL_Trigger_Example   member 수확물 0 / 0 34646 2008-09-08
14  [MSSQL] xml을 이용한 split   member 수확물 1 / 0 28819 2008-08-26
13  MSSQL - UNION ALL을 이용했을때 테이블명 가져오기 이미지   member 다자래 0 / 0 40221 2008-08-21
12  MSSQL - NULL 값을 다른 값으로 대체하기   member 다자래 8 / 4 101407 2008-08-21
11  [MSSQL] View안에 저장프로스져를 쓰는 방법   member 수확물 0 / 0 45385 2008-08-08
10  MSSQL - 숫자 세자리 마다 콤마(쉼표) 찍기   member 다자래 5 / 0 59237 2008-08-07
write
[2] button