Windows DB

SQL 인젝션 치료용 커서

2008.12.10 22:52

dhkim 조회 수:15077

안녕하세요 HOSTWAY입니다.

SQL Injection으로 인해 <Scrtip 구문이 삽입이 되어 피해를 입은 테이블에 대해서 자동으로 수정을 해주는 커서 입니다.

크게 자료형 vchar와 text로 나누어져 있습니다. 자료형 별로 나누어 2번씩 업데이트 해주시면 되겠습니다.

* 사용전 반드시 백업을 해주시기 바라며 DATABASE에 대해서 지식이 있는 개발자 분들이 사용해 주시면 되겠습니다.

감사합니다.
-----------------------------------
-- 적용하기 전 백업을 꼭 해주세요
-- EXEC 앞에 있는 주석 --를 제거해주시고 쓰시면 되겠습니다.
-- 참고사항으로 소유권 문제로 안될수 있으므로 쿼리 분석기의 바꾸기 기능으로
-- dbo를 사용자 계정으로 바꿔주시면 됩니다.
-- 감사합니다.
-----------------------------------
DECLARE @curr_sysobjid varchar(100), @curr_sysobj varchar(500),@curr_columns_id varchar(100), @curr_columns_name varchar(100),@curr_columns_xtype varchar(50)
DECLARE sysobjects_cursor CURSOR
FOR
    SELECT id,name FROM sysobjects WHERE xtype='U'
OPEN sysobjects_cursor

FETCH NEXT FROM sysobjects_cursor INTO @curr_sysobjid,@curr_sysobj
WHILE(@@FETCH_STATUS <> -1)
BEGIN
    IF(@@FETCH_STATUS <> -2)
     BEGIN
-- 컬럼명 출력용 커서----
      PRINT @curr_sysobjid +  ' ' + @curr_sysobj
 EXEC('DECLARE columns_cursor CURSOR FOR SELECT id,name,xtype FROM syscolumns WHERE id ='  + @curr_sysobjid)
 OPEN columns_cursor
 FETCH NEXT FROM columns_cursor INTO @curr_columns_id,@curr_columns_name,@curr_columns_xtype
 WHILE(@@FETCH_STATUS<> -1)
  BEGIN
     IF(@@FETCH_STATUS <> -2)
     BEGIN
       IF(type_name(@curr_columns_xtype) = 'varchar' or type_name(@curr_columns_xtype) =  'nvarchar')
       BEGIN
-- 자료형이 varchar거나 nvarchar일때
-- update할때
       --EXEC('UPDATE dbo.' + @curr_sysobj + ' SET '  + @curr_columns_name + ' = ' +  'replace(' +  @curr_columns_name + ',substring(' +  @curr_columns_name  + ',charindex(' + '''<script src=''' + ',' +  @curr_columns_name +'), len(' + @curr_columns_name + ')),' + ''''''  +')'  + ' FROM dbo.' + @curr_sysobj + ' WHERE ' + @curr_columns_name + ' LIKE ' + '''%<script src=%''')
----------------

-- SELECT할때
       --EXEC('SELECT ' + @curr_columns_name  + ',replace(' +  @curr_columns_name + ',substring(' +  @curr_columns_name  + ',charindex(' + '''<script src=''' + ',' +  @curr_columns_name +'), len(' + @curr_columns_name + ')),' + ''''''  +')'  + ' FROM dbo.' + @curr_sysobj + ' WHERE ' + @curr_columns_name + ' LIKE ' + '''%<script src=%''')
----------------

       PRINT @curr_columns_name
       END
      IF(type_name(@curr_columns_xtype) =  'ntext' or  type_name(@curr_columns_xtype) =  'text')
      BEGIN

-- 자료형이 text 나 ntext일때 CONVERT함수로 text,ntext 자료형을 varchar로 변경한다.
-- UPDATE할때
       --EXEC('UPDATE dbo.' + @curr_sysobj + ' SET '  + @curr_columns_name + ' = ' +  'replace(' +  'CONVERT(varchar(8000),' + @curr_columns_name + ')' + ',substring(' +  'CONVERT(varchar(8000),' + @curr_columns_name + ')'  + ',charindex(' + '''<script src=''' + ',' +  'CONVERT(varchar(8000),' + @curr_columns_name + ')' +'), len(' + 'CONVERT(varchar(8000),' + @curr_columns_name + ')' + ')),' + ''''''  +')'  + ' FROM dbo.' + @curr_sysobj + ' WHERE ' + @curr_columns_name + ' LIKE ' + '''%<script src=%''')
-------------

-- SELECT할때
       --EXEC('SELECT ' + 'CONVERT(varchar(8000),' + @curr_columns_name + ')' + ',replace(' + 'CONVERT(varchar(8000),' +  @curr_columns_name + ')' + ',substring(' +  'CONVERT(varchar(8000),' +  @curr_columns_name + ')'  + ',charindex(' + '''<script src=''' + ',' +  @curr_columns_name +'), len(' + 'CONVERT(varchar(8000),' +  @curr_columns_name + ')' + ')),' + ''''''  +')'  + ' FROM dbo.' + @curr_sysobj + ' WHERE ' + @curr_columns_name + ' LIKE ' + '''%<script src=%''')
-------------

       PRINT @curr_columns_name
      END
     END
 FETCH NEXT FROM columns_cursor INTO @curr_columns_id,@curr_columns_name,@curr_columns_xtype
                            END
 CLOSE columns_cursor
 DEALLOCATE columns_cursor
---------------------
--      PRINT 'SELECT id,name FROM ' + @curr_sysobj + ' WHERE id ='  + @curr_sysobjid
      FETCH NEXT FROM sysobjects_cursor INTO @curr_sysobjid,@curr_sysobj
    END
END
CLOSE sysobjects_cursor
DEALLOCATE sysobjects_cursor

 

번호 제목 글쓴이 날짜 조회 수
50 DBConnectionOpen오류 호스트웨이 2012.07.14 6367
49 Windows Server2008 에서 MSSQL2005 Reporting Service 설치하기 file 호스트웨이 2012.03.09 6531
48 MS-SQL 서버 메모리 사용량 제한 호스트웨이 2012.12.14 7286
47 [MS SQL]트랜잭션 사용 호스트웨이 2015.09.15 7411
46 DB 마이그레이션 방법 호스트웨이 2012.04.27 7421
45 mssql-table backup(테이블 백업/복원) 호스트웨이 2015.09.09 8716
44 [MSSQL]인덱스 (INDEX) 사용하기 호스트웨이 2015.09.16 8744
43 DB 소유권 이전 호스트웨이 2012.06.01 8859
42 MSSQL Express Backup 자동화 file 호스트웨이 2015.05.06 8868
41 [MSSQL] 다른 테이블로 데이터 INSERT 호스트웨이 2015.09.16 8978
40 MSSQL Master DB 이동 file 호스트웨이 2012.05.11 9428
39 DBMS효율적으로 관리하기 - LDF 축소 호스트웨이 2012.05.11 9600
38 SQL2008 설치시 성능 카운터 레지스트리 하이브 일관성 실패 file 호스트웨이 2012.07.14 10043
37 mssql 백업파일 내의 MDF,LDF 이상 확인 호스트웨이 2015.09.18 10089
36 [MS SQL]ssms 단축키 호스트웨이 2015.09.15 10456
35 데이터베이스 경로 변경하기 (MDF,LDF파일 경로 변경하기) 호스트웨이 2012.11.15 10671
34 SQL 서버 인증모드 변경 file 호스트웨이 2012.04.20 10693
33 MSSQL DB Lock 해제 file 호스트웨이 2012.06.23 10887
32 MDF, LDF 파일 복사하는 방법 호스트웨이 2015.09.18 11225
31 MS SQL 2008에서 메뉴 관리툴의 한글깨짐 현상 방지 file 호스트웨이 2012.03.16 11261