Web性能测试和CC攻击和方法和防范
上一篇 / 下一篇 2011-12-15 10:53:04 / 个人分类:性能测试
1、Web性能测试
Yj7J1rH AG9^8a h051Testing软件测试网3[&W'G ]ZP!Z
Web性能测试涉及的范围太广,但一般web开发者在程序上线以后很多都曾遇到过性能的问题。普遍表现为页面速度开始急剧变慢,正常访问时间变的很长,或则干脆给你抛出异常错误页面。这里会涉及到很多可能发生的情况,举例几个最主要发生的情况:
b~6GS|qO5L U&E0
8H2f7N,^.DL0 *数据库连接超过最大限制,目前一般表现为程序的连接池满,拒绝了与数据库的连接。
(d+d*o6lP051Testing软件测试网ZTH*x5GTl!~ C
* 数据库死锁51Testing软件测试网:m,R@WL M
51Testing软件测试网`R@&@4IzL
* Web Server 超过最大连接数(一般在虚拟主机上才会限制)51Testing软件测试网1V9Ty-o T CdwV4o
R9A4vG+\Ov'@\0 * 内存泄漏
5I*g'v m|+G/~051Testing软件测试网[P@ g_X
* Http连接数太多,即访问量超过了机器和软件设计正常所能提供的服务51Testing软件测试网2C+V6u7WwU%r6A2u
51Testing软件测试网^ SX!a1D$jv
2、CC攻击51Testing软件测试网 Okx]d6p B
*`0IOn"['Z([uX0 CC主要是用来攻击页面的.大家都有这样的经历,就是在访问论坛时,如果这个论坛比较大,访问的人比较多,打开页面的速度会比较慢,访问的人越多,论坛的页面越多,数据库就越大,被访问的频率也越高,占用的系统资源也就相当可观。
uw%}2@S{3t051Testing软件测试网6VUC l{Jy
一个静态页面不需要服务器多少资源,甚至可以说直接从内存中读出来发给你就可以了,但是论坛就不一样了,我看一个帖子,系统需要到数据库中判断我是否有读读帖子的权限,如果有,就读出帖子里面的内容,显示出来——这里至少访问了2次数据库,如果数据库的体积有200MB大小,系统很可能就要在这200MB大小的数据空间搜索一遍,这需要多少的CPU资源和时间?如果我是查找一个关键字,那么时间更加可观,因为前面的搜索可以限定在一个很小的范围内,比如用户权限只查用户表,帖子内容只查帖子表,而且查到就可以马上停止查询,而搜索肯定会对所有的数据进行一次判断,消耗的时间是相当的大.
g'gJ]7v0
w)@@O vd@0 CC就是充分利用了这个特点,模拟多个用户(多少线程就是多少用户)不停的进行访问(访问那些需要大量数据操作,就是需要大量CPU时间的页面).这一点用一个一般的性能测试软件就可以做到大量模拟用户并发。51Testing软件测试网&_9? q n'r?L
%E'qM9hcA._0 假设服务器A对Search.asp的处理时间需要0.01S(多线程只是时间分割,对结论没有影响),也就是说他一秒可以保证100个用户的 Search请求,服务器允许的最大连接时间为60s,那么我们使用CC模拟120个用户并发连接,那么经过 1分钟,服务器的被请求了7200次,处理了6000次,于是剩下了1200个并发连接没有被处理.有的朋友会说:丢连接!丢连接!问题是服务器是按先来后到的顺序丢的,这1200个是在最后10秒的时候发起的,想丢?!还早,经过计算,服务器满负开始丢连接的时候,应该是有7200个并发连接存在队列, 然后服务器开始120个/秒的丢连接,我们发动的连接也是120个/秒,服务器永远有处理不完的连接,服务器的CPU 100%并长时间保持,然后丢连接的60秒服务器也判断处理不过来了,新的连接也处理不了,这样服务器达到了超级繁忙状态.
Fc E5tPI051Testing软件测试网#cp+ow b*`/W
我们假设服务器处理Search只用了0.01S,也就是10毫秒(这个速度你可以去各个有开放时间显示的论坛看看),我们使用的线程也只有 120,很多服务器的丢连接时间远比60S长,我们的使用线程远比120多,可以想象可怕了吧,而且客户机只要发送了断开,连接的保持是代理做的,而且当服务器收到SQL请求,肯定会进入队列,不论连接是否已经断开,而且服务器是并发的,不是顺序执行,这样使得更多的请求进入内存请求,对服务器负担更大.51Testing软件测试网k'D3u^H r
-zV8s,p\:l*~0 3、防范方法
)T-m4b EKQ051Testing软件测试网0Iu#Yi#q:}6]a2P1n-M9^
说了攻击原理,大家肯定会问,那么怎么防御?使用硬件防火墙我不知道如何防范,除非你完全屏蔽页面访问,我的方法是通过页面的编写实现防御.51Testing软件测试网3v@I4OT@g
[%P+Ko1X&u0 1. 使用Cookie认证.这时候朋友说CC里面也允许Cookie,但是这里的Cookie是所有连接都使用的,所以启用IP Cookie认证就可以了.51Testing软件测试网z&^#_?4b+B
6Wei:q0v'e6AC P0 2. 利用Session.这个判断比Cookie更加方便,不光可以IP认证,还可以防刷新模式,在页面里判断刷新,是刷新就不让它访问,没有刷新符号给它刷新符号.给些示范代码吧,Session:
\z?;^V2e0
;YN-qU*c%F8xTUl!n0 程序代码:
v R,gP!z%V j*G L/|051Testing软件测试网:K,ID1Q j3I
〈%
{C:HvTd F051Testing软件测试网3GC2z*RD
if session(“refresh”)〈〉 1 then51Testing软件测试网mE:oL l1_#\~IC\
51Testing软件测试网+r#lY7PN[^FI"b
Session(“refresh”)=session(“refresh”) 151Testing软件测试网,rjlb|&{W RN9W
&A&J,O:kt0 Response.redirect “index.asp”
,R"C H1p~w!@fMe051Testing软件测试网7D;N;@-v?v
End if
1a4y(eUDrV4X051Testing软件测试网8G1[Q7r H f
%〉
F7k:Ofa Q @-T \ `051Testing软件测试网P8j)cD![jU X%I
这样用户第一次访问会使得Refresh=1,第二次访问,正常,第三次,不让他访问了,认为是刷新,可以加上一个时间参数,让多少时间允许访问,这样就限制了耗时间的页面的访问,对正常客户几乎没有什么影响.51Testing软件测试网u4Q7vwA6naa$?
'n$CA d+O%S*C%E7K*N+q0 3.通过代理发送的HTTP_X_FORWARDED_FOR变量来判断使用代理攻击机器的真实IP,这招完全可以找到发动攻击的人,当然,不是所有的代理服务器都发送,但是有很多代理都发送这个参数.详细代码:
ss1u(f&pYJ0
+\/nNA'ay0 程序代码:
3te2?2c RzPL051Testing软件测试网EY`k8hq? m(q!A&U
〈%51Testing软件测试网;G(Y6bv3Y m
)@R*z+_1U7i7\ \,n0 Dim fsoObject51Testing软件测试网%e4D'p2m!S'W ]I2W
3?&A5T Nf~0 DimtsObject
Ms%nt~O051Testing软件测试网yf&g X W\9N
dim file51Testing软件测试网m9w*_#};]l
51Testing软件测试网.kC0w(Ve sN
ifRequest.ServerVariables(HTTP_X_FORWARDED_FOR)= then
?R(XJ.Eu"W3V#g1U051Testing软件测试网,tjr ];P@!kt.m6N)} e
response.write无代理访问
C"w#vq*A051Testing软件测试网 q&Mx'Qh zb!o
response.end
Yj7J1rH AG9^8a h051Testing软件测试网3[&W'G ]ZP!Z
Web性能测试涉及的范围太广,但一般web开发者在程序上线以后很多都曾遇到过性能的问题。普遍表现为页面速度开始急剧变慢,正常访问时间变的很长,或则干脆给你抛出异常错误页面。这里会涉及到很多可能发生的情况,举例几个最主要发生的情况:
b~6GS|qO5L U&E0
8H2f7N,^.DL0 *数据库连接超过最大限制,目前一般表现为程序的连接池满,拒绝了与数据库的连接。
(d+d*o6lP051Testing软件测试网ZTH*x5GTl!~ C
* 数据库死锁51Testing软件测试网:m,R@WL M
51Testing软件测试网`R@&@4IzL
* Web Server 超过最大连接数(一般在虚拟主机上才会限制)51Testing软件测试网1V9Ty-o T CdwV4o
R9A4vG+\Ov'@\0 * 内存泄漏
5I*g'v m|+G/~051Testing软件测试网[P@ g_X
* Http连接数太多,即访问量超过了机器和软件设计正常所能提供的服务51Testing软件测试网2C+V6u7WwU%r6A2u
51Testing软件测试网^ SX!a1D$jv
2、CC攻击51Testing软件测试网 Okx]d6p B
*`0IOn"['Z([uX0 CC主要是用来攻击页面的.大家都有这样的经历,就是在访问论坛时,如果这个论坛比较大,访问的人比较多,打开页面的速度会比较慢,访问的人越多,论坛的页面越多,数据库就越大,被访问的频率也越高,占用的系统资源也就相当可观。
uw%}2@S{3t051Testing软件测试网6VUC l{Jy
一个静态页面不需要服务器多少资源,甚至可以说直接从内存中读出来发给你就可以了,但是论坛就不一样了,我看一个帖子,系统需要到数据库中判断我是否有读读帖子的权限,如果有,就读出帖子里面的内容,显示出来——这里至少访问了2次数据库,如果数据库的体积有200MB大小,系统很可能就要在这200MB大小的数据空间搜索一遍,这需要多少的CPU资源和时间?如果我是查找一个关键字,那么时间更加可观,因为前面的搜索可以限定在一个很小的范围内,比如用户权限只查用户表,帖子内容只查帖子表,而且查到就可以马上停止查询,而搜索肯定会对所有的数据进行一次判断,消耗的时间是相当的大.
g'gJ]7v0
w)@@O vd@0 CC就是充分利用了这个特点,模拟多个用户(多少线程就是多少用户)不停的进行访问(访问那些需要大量数据操作,就是需要大量CPU时间的页面).这一点用一个一般的性能测试软件就可以做到大量模拟用户并发。51Testing软件测试网&_9? q n'r?L
%E'qM9hcA._0 假设服务器A对Search.asp的处理时间需要0.01S(多线程只是时间分割,对结论没有影响),也就是说他一秒可以保证100个用户的 Search请求,服务器允许的最大连接时间为60s,那么我们使用CC模拟120个用户并发连接,那么经过 1分钟,服务器的被请求了7200次,处理了6000次,于是剩下了1200个并发连接没有被处理.有的朋友会说:丢连接!丢连接!问题是服务器是按先来后到的顺序丢的,这1200个是在最后10秒的时候发起的,想丢?!还早,经过计算,服务器满负开始丢连接的时候,应该是有7200个并发连接存在队列, 然后服务器开始120个/秒的丢连接,我们发动的连接也是120个/秒,服务器永远有处理不完的连接,服务器的CPU 100%并长时间保持,然后丢连接的60秒服务器也判断处理不过来了,新的连接也处理不了,这样服务器达到了超级繁忙状态.
Fc E5tPI051Testing软件测试网#cp+ow b*`/W
我们假设服务器处理Search只用了0.01S,也就是10毫秒(这个速度你可以去各个有开放时间显示的论坛看看),我们使用的线程也只有 120,很多服务器的丢连接时间远比60S长,我们的使用线程远比120多,可以想象可怕了吧,而且客户机只要发送了断开,连接的保持是代理做的,而且当服务器收到SQL请求,肯定会进入队列,不论连接是否已经断开,而且服务器是并发的,不是顺序执行,这样使得更多的请求进入内存请求,对服务器负担更大.51Testing软件测试网k'D3u^H r
-zV8s,p\:l*~0 3、防范方法
)T-m4b EKQ051Testing软件测试网0Iu#Yi#q:}6]a2P1n-M9^
说了攻击原理,大家肯定会问,那么怎么防御?使用硬件防火墙我不知道如何防范,除非你完全屏蔽页面访问,我的方法是通过页面的编写实现防御.51Testing软件测试网3v@I4OT@g
[%P+Ko1X&u0 1. 使用Cookie认证.这时候朋友说CC里面也允许Cookie,但是这里的Cookie是所有连接都使用的,所以启用IP Cookie认证就可以了.51Testing软件测试网z&^#_?4b+B
6Wei:q0v'e6AC P0 2. 利用Session.这个判断比Cookie更加方便,不光可以IP认证,还可以防刷新模式,在页面里判断刷新,是刷新就不让它访问,没有刷新符号给它刷新符号.给些示范代码吧,Session:
\z?;^V2e0
;YN-qU*c%F8xTUl!n0 程序代码:
v R,gP!z%V j*G L/|051Testing软件测试网:K,ID1Q j3I
〈%
{C:HvTd F051Testing软件测试网3GC2z*RD
if session(“refresh”)〈〉 1 then51Testing软件测试网mE:oL l1_#\~IC\
51Testing软件测试网+r#lY7PN[^FI"b
Session(“refresh”)=session(“refresh”) 151Testing软件测试网,rjlb|&{W RN9W
&A&J,O:kt0 Response.redirect “index.asp”
,R"C H1p~w!@fMe051Testing软件测试网7D;N;@-v?v
End if
1a4y(eUDrV4X051Testing软件测试网8G1[Q7r H f
%〉
F7k:Ofa Q @-T \ `051Testing软件测试网P8j)cD![jU X%I
这样用户第一次访问会使得Refresh=1,第二次访问,正常,第三次,不让他访问了,认为是刷新,可以加上一个时间参数,让多少时间允许访问,这样就限制了耗时间的页面的访问,对正常客户几乎没有什么影响.51Testing软件测试网u4Q7vwA6naa$?
'n$CA d+O%S*C%E7K*N+q0 3.通过代理发送的HTTP_X_FORWARDED_FOR变量来判断使用代理攻击机器的真实IP,这招完全可以找到发动攻击的人,当然,不是所有的代理服务器都发送,但是有很多代理都发送这个参数.详细代码:
ss1u(f&pYJ0
+\/nNA'ay0 程序代码:
3te2?2c RzPL051Testing软件测试网EY`k8hq? m(q!A&U
〈%51Testing软件测试网;G(Y6bv3Y m
)@R*z+_1U7i7\ \,n0 Dim fsoObject51Testing软件测试网%e4D'p2m!S'W ]I2W
3?&A5T Nf~0 DimtsObject
Ms%nt~O051Testing软件测试网yf&g X W\9N
dim file51Testing软件测试网m9w*_#};]l
51Testing软件测试网.kC0w(Ve sN
ifRequest.ServerVariables(HTTP_X_FORWARDED_FOR)= then
?R(XJ.Eu"W3V#g1U051Testing软件测试网,tjr ];P@!kt.m6N)} e
response.write无代理访问
C"w#vq*A051Testing软件测试网 q&Mx'Qh zb!o
response.end