前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >软件安全性测试(连载22)

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

作者头像
顾翔
发布2020-02-19 15:22:05
7140
发布2020-02-19 15:22:05
举报
文章被收录于专栏:啄木鸟软件测试

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中。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1)网页跳转
    • ① 客户端跳转
      • ②服务器端跳转
      • 2)钓鱼
      相关产品与服务
      云服务器
      云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档