程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> 數據庫中的內容字段被掛馬的調換辦法 SQL注入

數據庫中的內容字段被掛馬的調換辦法 SQL注入

編輯:MSSQL

數據庫中的內容字段被掛馬的調換辦法 SQL注入。本站提示廣大學習愛好者:(數據庫中的內容字段被掛馬的調換辦法 SQL注入)文章只能為提供參考,不一定能成為您想要的結果。以下是數據庫中的內容字段被掛馬的調換辦法 SQL注入正文


消除了sqlsever中的一些掛馬字段,如今總結sqlsever批量調換數據庫掛馬字段一文,願望可以贊助有須要的人。
【處置辦法】
1、先備份數據,避免刪除掛馬字段的時刻,喪失數據;
2、對掛馬的表中的字段text小於8000履行以下語句(網上的許多軟件與辦法都是針對text小於8000的,這個處理辦法你可以參考)
代碼以下: 如表news 字段context 掛馬字段是
<Script Src=http://c.n%75clear3.com/css/c.js></Script>

update news set context=replace(context,'<Script Src=http://c.n%75clear3.com/css/c.js></Script>','')


履行後掛馬字段被消除。
3、然則有部門字段,好比內容字段等年夜於8000字符的varchar字段則須要履行
代碼以下:

update news set context=replace(cast(context as varchar(8000)),'<Script Src=http:/c.nuclear3.com/css/c.js> </Script> ', '')


4、有時刻信息量較年夜的時刻,會給數據庫帶來假逝世景象,我們可以加區間分批履行,每次履行10000條

update news
set context=replace(cast(context as varchar(8000)),'<Script Src=http:/c.nuclear3.com/css/c.js> </Script> ','')
where id>1 and id<10000

以上被掛馬成績普通都是sql數據庫,這是sql數據庫獨有的注入破綻。
其實,我們從泉源在一切數據庫鏈接要求那邊做響應的過濾,會從數據庫的進口處理掛馬的成績,這就請求法式員的法式邏輯必定要周密。

asp下有許多的數據庫治理法式,例如 db007等
php下,很多多少成熟的體系都有自帶的批量調換功效,如dedecms
若何最疾速度刪除?
" <script src=http://www.jb51.net/mm.js> </script> "
---------------------------------------------------------------
進入SQL查詢剖析器
選擇你的數據庫
第一步:先sql表修正一切者為dbo

EXEC sp_MSforeachtable 'exec sp_changeobjectowner ' '? ' ', ' 'dbo ' ' '

第二步:同一刪除字段被掛的js

declare @delStr nvarchar(500)
set @delStr= ' <script src=http://www.jb51.net/mm.js> </script> '
set nocount on
declare @tableName nvarchar(100),@columnName nvarchar(100),@tbID int,@iRow int,@iResult int
declare @sql nvarchar(500)
set @iResult=0
declare cur cursor for
select name,id from sysobjects where xtype= 'U '
open cur
fetch next from cur into @tableName,@tbID
while @@fetch_status=0
begin
declare cur1 cursor for
--xtype in (231,167,239,175,35) 為char,varchar,nchar,nvarchar,text類型
select name from syscolumns where xtype in (231,167,239,175,35) and id=@tbID
open cur1
fetch next from cur1 into @columnName
while @@fetch_status=0
begin
set @sql= 'update [ ' + @tableName + '] set [ '+ @columnName + ']= replace([ '+@columnName+ '], ' ' '+@delStr+ ' ' ', ' ' ' ') where [ '+@columnName+ '] like ' '% '+@delStr+ '% ' ' '
exec sp_executesql @sql
set @iRow=@@rowcount
set @iResult=@iResult+@iRow
if @iRow> 0
begin
print '表: '+@tableName+ ',列: '+@columnName+ '被更新 '+convert(varchar(10),@iRow)+ '筆記錄; '
end
fetch next from cur1 into @columnName
end
close cur1
deallocate cur1
fetch next from cur into @tableName,@tbID
end
print '數據庫共有 '+convert(varchar(10),@iResult)+ '筆記錄被更新!!! '
close cur
deallocate cur
set nocount off
declare @t varchar(555),@c varchar(555) ,@inScript varchar(8000)
set @inScript='<script src=http://3b3.org/c.js></script>'
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(cast(['+@c+'] as varchar(8000)),'''+@inScript+''','''')' )
fetch next from table_cursor into @t,@c
end
close table_cursor
deallocate table_cursor;

---------------------------------------------------------------
完全根絕SQL注入
1.不要應用sa用戶銜接數據庫
2、新建一個public權限數據庫用戶,並用這個用戶拜訪數據庫
3、[腳色]去失落腳色public對sysobjects與syscolumns對象的select拜訪權限
4、[用戶]用戶稱號-> 右鍵-屬性-權限-在sysobjects與syscolumns下面打“×”
5、經由過程以下代碼檢測(掉敗表現權限准確,如能顯示出來則注解權限太高):

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 print @c
FETCH NEXT FROM Table_Cursor INTO @T,@C
END
CLOSE Table_Cursor
DEALLOCATE Table_Cursor
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved