接口安全测试--业务安全实例
接口除了存在前面两个章节讲的sql注入、上传漏洞安全风险之外,在业务应用中也存在一些业务逻辑漏洞,本文以一个简化版的电商网站项目为例(有关电商网站的业务场景及具体设计,参见附录2--电商系统设计),来介绍两个非常典型的漏洞:越权访问和支付漏洞
1. 越权访问
按附录2中介绍的方法,启动接口服务和Web网站,在Web电商系统中模拟用户下单、支付到查看订单的流程
1)用户下单
浏览器地址栏中输入"http://localhost:5001",打开网站登录界面,如下图所示:
我们用Mr.null用户(用户名:Mr.null,密码:a123456)登录系统,进入商品列表页面,如下图所示:
点击id为21的商品后面的【下单】按钮,进入订单支付页面,如下图所示:
点击【支付】按钮,进入模拟的第三方支付页面,此处并不会真正进行支付操作,如下图所示:
点击【支付完成】按钮,进入订单列表页面,Mr.null用户订单列表中显示刚才下单的150号订单,如下图所示:
重新打开一个浏览器窗口,用ZhangSan用户(用户名:ZhangSan,密码:a1234567)登录,然后选择Book20下单,如下图所示:
完成支付后,进入订单列表页面,ZhangSan用户订单列表只有自己下单的151号订单,如下图所示:
回到Mr.null用户所在浏览器页面,再次刷新Mr.null用户的订单列表,仍然只有150号订单,不会显示ZhangSan用户的151号订单,证明只有下单用户自身才可查看自己的订单,符合业务逻辑。
2)越权操作
点击订单150号后的【查看】,进入订单详情页面,如下图所示:
上述场景中,Mr.null用户的订单列表中只有自己的订单,且只能打开查看自己的订单详情,其无法查看也不应该有权限查看其他人的订单信息,到目前为止,看似一切正常,不过,你有没有注意到,浏览器URL地址栏中的信息,如下所示:
http://localhost:5001/my_order_detail/150
可以看到, URL末尾"/"后是一串数字,该数字就是订单号,如果我们将这个数字修改为151,会出现什么结果呢?
如下图所示,通过修改订单号信息,Mr.null用户可以看到ZhangSan用户的订单详情信息,订单中包含的本只有ZhangSan自己才知晓的收件人名称、手机号、地址等关键信息被毫不相干的 Mr.null用户获取到,造成了信息的泄漏,这个就是一个典型的越权访问问题。
上述订单号是非常有规律的自然数,因此,我们可以通过订单号+1/-1的方式循环遍历出所有订单信息,如果系统存在此漏洞,一个普通用户利用此漏洞就可以获取到超出其权限范围内的订单详情信息。
越权分水平越权和垂直越权。
水平越权,指相同级别的用户或者具有相关权限的同一角色不同用户之间,可以越权访问、修改或者删除其他人的信息,上述案例即为水平越权。
垂直越权,指普通用户可以访问只有管理员才能访问到的资源,比如,后台网站模块更改等。
3)接口越权
为了更直观的演示越权访问的过程,上述操作我们是在Web页面完成的,实际上在接口层面,我们同样可以实现越权访问。
参考附录2,为了能抓到本地服务的数据包,我们在hosts文件中增加如下内容:
127.0.0.1 order.web 127.0.0.1 order.api
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
<p> 本专刊共五章 21 篇正文及 5 个对应的 GitHub 项目,主要介绍了接口测试基础知识及测试用例设计方法,认证鉴权、加密验签,自动化测试,安全性测试,性能测试等内容,每一章节都有代码实例来剖析其原理,并提供了一个完整电商系统的代码,可以直接实操演练,让你知其然知其所以然,轻松搞定接口测试。加入专刊,你就加入了一大群志同道合的优质测试人圈子,同时还有和作者及作者的朋友们互动交流的机会。 本专刊购买后即可解锁所有章节,故不可以退换哦~ </p> <p> <br /> </p>

