SQL 인젝션 공격은 당하지 않는 것이 가장 좋다. 공격을 당하지 않는 방법은 프로그램 개발시 이를 고려하여 개발하는 방법이 있고, Webnight와 같은 무료 웹방화벽을 이용하는 방법이 있다.
그러나 이미 공격을 당한 경우 공격한 스크립트 내용을 지우는 저장 프로시저이다.
먼저 저장 프로시저를 생성을 하고 실행을 해 주면 된다.
프로시저 생성시 공격한 스크립트 내용을 @DEL_STR에 대입후 생성을 한다.
1. 프로시저 생성
CREATE PROCEDURE [MP_DELSTR]
AS
DECLARE @TP int;
DECLARE @TBL varchar(255), @CLN varchar(255), @DEL_STR varchar(255);
SET @DEL_STR='<script src=http://s.shunxing.com.cn/s.js></script>'
DECLARE Table_Cursor CURSOR FOR
SELECT a.name, b.name ,b.xtype
FROM sysobjects a, syscolumns b
WHERE a.id = b.id AND a.xtype = 'u' AND
(b.xtype = 99 OR b.xtype = 35 OR b.xtype = 231 OR b.xtype = 167 OR b.xtype=175 OR b.xtype=239 );
OPEN Table_Cursor;
FETCH NEXT FROM Table_Cursor INTO @TBL, @CLN, @TP;
WHILE (@@FETCH_STATUS = 0) BEGIN
IF @TP > 100
BEGIN
EXEC('UPDATE ['+ @TBL +'] set [' + @CLN + '] = REPLACE('+ @CLN+' , '''+@DEL_STR +''','''' )');
END
ELSE
BEGIN
EXEC('UPDATE ['+ @TBL +'] set [' + @CLN + '] = REPLACE(CONVERT(varchar(8000),'+ @CLN+') , '''+@DEL_STR +''','''' )');
END
FETCH NEXT FROM Table_Cursor INTO @TBL, @CLN,@TP;
END;
CLOSE Table_Cursor;
DEALLOCATE Table_Cursor;
GO
2. 프로시저를 실행한다.
EXEC MP_DELSTR