1.1. 接口简介

Web API是网络应用程序接口。包含了广泛的功能,网络应用通过API接口,可以实现存储服务、消息服务、计算服务等能力,利用这些能力可以进行开发出强大功能的web应用。

举例:

12306购票网站,所有的数据都在12306上,12306提供一整套接口,调用接口我们就可以获取到里面的数据。比如:在携程/艺龙等第三方网站上购买车票,实际就是调用了12306提供的接口获取库存等信息。

可以简单理解为:访问一个网址后,返回一堆json或者xml等特定格式的数据,这个网址就可以理解为一个web接口

1.2. 接口分类

  1. Webservice接口:走soap协议,请求报文和返回报文都是xml格式
  2. HTTP API接口(常规客户):走HTTP协议,通过路径来区分调用的方法,以RESTful风格为主,请求报文入参有多种形式,返回报文一般为json串,最常见的是get和post方法

1.3. 接口文档

在项目开发中,web项目的前后端分离开发,APP开发,需要由前后端工程师共同定义接口,编写接口文档,之后大家都根据这个接口文档进行开发,到项目结束前都要一直维护。

1.3.1. 接口文档的作用

1、项目开发过程中前后端工程师有一个统一的文件进行沟通交流开发 2、项目维护中或者项目人员更迭,方便后期人员查看、维护

1.3.2. 接口文档规范

每一个接口的文档分为四部分:请求方法、URI、请求参数、返回参数

  • 请求方法:获取(GET)新增(POST)修改(PUT)删除(DELETE)
  • URI:调用这个接口需要访问的URI
  • 请求参数:字段、描述、类型、是否必填、备注
  • 返回参数:是否调用成功,返回的数据有哪些

image-20211122101721821

1.4. 测试准备

测试WEB API时,至少需要客户提供2个数据:

  1. API地址
  2. 接口文档

其他的按需要求客户提供,比如接口示例、认证token、sign校验算法等

1.5. 如何测试

和平时的web测试一样,模拟客户端向服务器发送报文请求,服务器接收请求报文后对相应的报文做处理并向客户端返回应答,客户端接收应答的一个过程。

唯一的区别是接口测试需要自己构造参数,而web测试时网页会自动辅助构造参数。

1.5.1. 测试思路

单流程

业务场景无上下游依赖,这个接口可以代表整个功能,如查询个人信息

  • 构造参数 --> 发送请求 --> 校验结果
  • 常规漏洞
  • ...

多流程

接口之间有数据流转,共同形成一个完成的业务流程,如注册功能

  • 构造参数 --> 发送请求 --> 校验结果
  • 常规漏洞
  • 流程是否可以绕过,直接到达最后一步
  • ...

1.5.2. 测试什么

主要以安全测试为主

1.6. 测试举例

1.6.1. 获取数据包

如果是提供的类似Swagger UI的接口文档,可以直接在网页中辅助构造请求包,输入参数发起请求,并用burp抓包即可

image-20211122104756688

如果是提供的word文档等,则需要手动构造请求数据包(建议拿其他的数据包来修改,比如拿访问baidu.com的数据包)

  • 假设API接口的地址为http://xxx.cn

image-20211122105207158

构造数据包

POST /api/login HTTP/1.1
Host: xxx.cn
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Dnt: 1
Sec-Gpc: 1
Te: trailers
Connection: close
Content-Type: application/json
Content-Length: 39

{"username":"admin","password":"admin"}

image-20211122105739145

1.6.2. 开始测试

有了数据包,就和常规的测试一样了,主要在于思维的问题

image-20211122110013242

根据上图的数据包,做一个大致的测试分析:

  1. 观察接口命名,采用驼峰命名法,是否存在其他不在接口文档的类似的测试接口,比如getUserInfosgetUserInfoByUid
  2. 这个地方虽然参数是phone,那会不会后端模糊查询输入用户名也可以查询呢
  3. 查询任意用户信息的接口,应该存在鉴权机制
    1. 未授权访问
    2. 针对普通用户,每个人只能查询自己的信息
  4. 手机号进入后端查询用户的信息,肯定会进行数据库查询
    1. 是否可以模糊查询,比如1388888%
    2. 是否存在SQL注入
    3. 参数置空、过长或者输入特殊字符,会不会导致数据库报错抛出异常,获取一些敏感信息
Copyright © d4m1ts 2022 all right reserved,powered by Gitbook该文章修订时间: 2021-12-14 09:55:53

results matching ""

    No results matching ""