-- 검사루틴
DECLARE @T varchar(255), @C varchar(255);
DECLARE Table_Cursor CURSOR FOR
SELECT a.name, b.name
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);
OPEN Table_Cursor;
FETCH NEXT FROM Table_Cursor INTO @T, @C;
WHILE (@@FETCH_STATUS = 0) BEGIN
EXEC(
'select ['+@C+'] from ['+@T+']
where ['+@C+'] like ''%<script%</script>'''
);
FETCH NEXT FROM Table_Cursor INTO @T, @C;
END;
CLOSE Table_Cursor;
DEALLOCATE Table_Cursor;
검색 부분을 바꿔가면서 해당 데이타를 찾는다.
-- 수정루틴
DECLARE @T varchar(255), @C varchar(255);
DECLARE Table_Cursor CURSOR FOR
SELECT a.name, b.name
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);
OPEN Table_Cursor;
FETCH NEXT FROM Table_Cursor INTO @T, @C;
WHILE (@@FETCH_STATUS = 0) BEGIN
EXEC(
'update ['+@T+'] set ['+@C+'] = left(
convert(varchar(8000), ['+@C+']),
len(convert(varchar(8000), ['+@C+'])) - 6 -
patindex(''%tpircs<%'',
reverse(convert(varchar(8000), ['+@C+'])))
)
where ['+@C+'] like ''%<script%</script>'''
);
FETCH NEXT FROM Table_Cursor INTO @T, @C;
END;
CLOSE Table_Cursor;
DEALLOCATE Table_Cursor;
위와 같이 처리할때 정상적인 내용도 뒷부분부터 잘려나가는 현상이 있다.
DECLARE @T varchar(255), @C varchar(255);
DECLARE Table_Cursor CURSOR FOR
SELECT a.name, b.name
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);
OPEN Table_Cursor;
FETCH NEXT FROM Table_Cursor INTO @T, @C;
WHILE (@@FETCH_STATUS = 0) BEGIN
EXEC(
'update ['+@T+'] set ['+@C+'] = replace(convert(varchar(8000), ['+@C+']), ''<script src=http://s1.cawjb.com/jp.js></script>'','''')
where ['+@C+'] like ''%<script%</script>'''
);
FETCH NEXT FROM Table_Cursor INTO @T, @C;
END;
CLOSE Table_Cursor;
DEALLOCATE Table_Cursor;
위와 같이 특정 패턴이 아닌 단어를 치환하는 방법도 병행하는것이 좋을거 같다.
declare @t varchar(255),@c varchar(255) declare table_cursor cursor for
select a.name,b.name
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)
open table_cursor fetch next from table_cursor into @t,@c
while(@@fetch_status=0)
begIn
exec('updaTe [' +@t+ '] set [' +@c+ '] = replace(convert(varchar(8000), [' +@c+ ']), ''<script src=http://dae3.cn></script>'','''')')
fetch next from table_cursor into @t,@c
end
close table_cursor
deallocate table_cursor
출처 http://blog.naver.com/red_kiss/120054361364
'Story > asp' 카테고리의 다른 글
asp 쿠키(Cookies) 사용 (0) | 2011.02.25 |
---|---|
asp 특정 아이피(ip)일때 처리 (0) | 2011.02.19 |
asp 에서 " 큰따옴표 사용하기 (0) | 2011.01.28 |
ASP 문자열함수 + ASP 디버깅함수 (0) | 2009.01.07 |
CharSet utf-8 , euc-kr (0) | 2009.01.03 |