软件安全性测试(连载22)

2020-02-19 15:22:05 浏览数 (1)

2.15 DDOS攻击

分布式拒绝服务攻击(Distributed denial of service attack:DDOS)可以使很多的计算机在同一时间遭受到攻击,使攻击的目标无法正常使用,分布式拒绝服务攻击已经出现了很多次,导致很多的大型网站都出现了无法进行操作的情况,这样不仅仅会影响用户的正常使用,同时造成的经济损失也是非常巨大的。

如图4-50所示,一个停车场,如果停车场都被石子堆放了,车子就无法停进来,这样提供停车服务就失效了。

图4-50 被石子铺满的停车场

DDOS攻击与此类似,如果大量垃圾数据包占满了网络I/O从而导致正常的HTTP请求找到拒绝,就形成了DDOS攻击。当年美国炸毁中国驻南斯拉夫,国内IT民间发起在某个时间段对美国驻中国大使馆的IP地址发送大量的PING命令攻击,通过ICMP协议达到DDOS攻击的目的。这次DDOS攻击长达三个小时,造成了美国使馆内的网络工作彻底瘫痪。

在Web领域往往通过在自己网页上设置iframe标签中的src指向被攻击的网站,然后通过其他手段,比如基于selenium代码(在第9.2节将进行介绍)的循环控制,来频繁访问这个网页。

<iframe src="http://www.a.com"height="0" width="0">

防止DDOS攻击的方法有三种。

•方法1。将访问频率高的数据放在内存缓存中。

•方法2。限制请求次数。比如新浪博客,一小时内最多只能发表博文10篇,如图4-51所示。

图4-51 新浪博客,一小时内最多只能发表博文10篇

•方法3。使用验证码。

测试人员也可以通过编写自动化功能测试脚本,基于GUI的或者基于接口的都可以(第9章将进行详细介绍),利用循环语句来测试代码是否对DDOS攻击做好防范。

import requests

import unittest

class login(unittest.TestCase):

defsetUp(self):

self.correctusername ="cindy"

self.correctpassword ="123456"

self.discorrectusername ="jerry"

self.discorrectpassword ="000000"

self.url="http://localhost:8000/login_action/"

self.token ="RNF3Y04qFeJkMwCDsTMn4gfMcyfQ2vUjXbcENLADEFyCSRp1pBdezZKwHhlSwqgE"

self.cookie = {"csrftoken":self.token}

#正确的用户名,正确的密码

deftest_correctusername_correctpassword(self):

payload={"username":self.correctusername,"password":self.correctpassword,"csrfmiddlewaretoken":self.token}

for i in range(1000):

data =requests.post(self.url,data=payload,cookies=self.cookie)

#验证返回码

self.assertEqual("200",str(data.status_code))

#验证返回内容

self.assertIn("电子商务系统" ,str(data.text))

if __name__=='__main__':

#构造测试集

suite=unittest.TestSuite()

suite.addTest(login("test_correctusername_correctpassword"))

#运行测试集合

runner=unittest.TextTestRunner()

runner.run(suite)

2.16钓鱼和网页跳转

钓鱼是黑客经常采取的攻击手段。钓鱼多数采用网页跳转的技巧来实现。这里先来介绍一下网页跳转。

1)网页跳转

网页跳转一般分为客户端跳转和服务器端跳转。

① 客户端跳转

客户端跳转将引起URL变化,jsp代码如下

<%

response.sendRedirect("wellcome.html");

%>

Python的Django框架为。

returnrender(request,"index.html",{'uf':uf,"error":"用户名或者密码错误"})

当页面发生跳转以后,抓包软件会获取响应码为3XX的响应包。如图4-52所示。

图4-52 网页跳转产生的3XX响应包

②服务器端跳转

服务器端跳转URL不会变化,但是仍旧会返回响应码为3XX的响应包。下段代码是Java产生的服务器端跳转,跳转后进入wellcome.html。

public class HttpForwardServlet extends HttpServlet{

@Override

publicvoid doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException,IOException {

this.doPost (request, response);

}

@Override

publicvoid doPost(HttpServletRequest request, HttpServletResponse response)

throwsServletException, IOException{

request.getRequestDispatcher("wellcome.html").forward(request,response);

}

}

2)钓鱼

黑客往往通过各种诱饵,利用用户的各种心理,诱惑用户上钩,进入故意设置好的网站,从而达到钓鱼的目的。如图4-53所示。

图4-53 钓鱼

“QQ基金实现你发财的梦想”可能是给你短信或者微信,甚至于植入某个网站的木马,当你被其内容吸引点击后,就进入了QQ登录界面,这个登录界面其实就是黑客制作藐视QQ的网站,而非QQ官方网站。当你输入自己QQ用户名和密码后,QQ用户名和密码就被黑客截获。

有如下的HTML代码。

<a href="selenium.html"target="_blank">selenium介绍</a>

在selenium.html中,黑客通过植入如下代码来实现钓鱼的功能。

<script type='text/javascript'>

if (window.opener) {

window.opener.location='http://www.myhack.com/';

}

</script>

当用户点击selenium介绍连接后进入selenium.html页面,在selenium.html中通过window.opener.location把主界面跳转到黑客网站。通过对第2.4-3节的学习,知道如果把<a>标签中加入rel="noopenernoreferrer"属性,即。

<a href= "selenium.html"target="_blank" rel="noopenernoreferrer">selenium介绍</a>

就可以防止钓鱼了。另外还可以通过以下方式来防止钓鱼。

•避免使用重定向和转发。

•如果使用重定向和转发,则不要确定目标时涉及到用户参数。

•如果需要登录,可以从session获取登录信息然后进行判断。

•可以通过request获取之前的页面路径:Request.getHeader("referrer")来防止钓鱼。

•可以通过上一个页面传参,本页面验证的方式。参数放在body中,不要放在URL、session或cookie中。

0 人点赞