接口:

内部模块对外部系统,其他模块服务提供一种调用或连接服务的标准。

接口总类:

1.HTTP api接口

通用web网站接口,http协议通过路径来区分调用,请求报文是key-value形式,返回是json串,常见的请求方式有get和post等等。

2.RPC类接口-测评

远程过程调用,客户端和服务器连接,比如:游戏平台登录账号密码进入到远程的服务器上面-

账号密码在接口里面传输查询判断

3.WebService类-测评

专门传递数据,soap协议和REST,通过http传输,请求和返回报文xml格式

soap和REST:

SOAP是基于 XML 的信息交换简易协议。SOAP=HTTP+XML

一条 SOAP 消息就是一个普通的 XML 文档,包含下列元素:

  • 必需的 Envelope 元素,可把此 XML 文档标识为一条 SOAP 消息
  • 可选的 Header 元素,包含头部信息
  • 必需的 Body 元素,包含所有的调用和响应信息
  • 可选的 Fault 元素,提供有关在处理此消息所发生错误的信息
    必须用XML编码,不能包含DTD引用和XML处理命令。

REST专于传递资源,资源解析

SOAP 是协议,REST 是架构风格。

SOAP 是高度结构化的,使用 XML 数据格式,而 REST 更灵活,允许应用程序交换多种格式的数据。

接口
WebService API测试

探针:?wsdl 利用:SoapUl&ReadyAPI

1.接口暴露公网

2.传输数据未校验

3.传输过程数据加密

测试工具:soapUI,readyapi

可以通过接口获取数据,造成信息泄露安全问题,不校验的话有

readygpi自动化测试

创建安全测试实例

#SOAP类-Swagger&SoapUI&EXF

什么是swagger:

Swagger 是最流行的 第三方API 开发工具,它遵循 OpenAPI 规范,

用于设计、构建和文档化API

要对自己网站的接口调试正常的,但是接口很多,用swagger方便对接口调试

swagger上线平台集成了所有服务接口,方便测试者批量测试也造成可能。

swagger
api/swagger
swagger/ui
api/swaggerlui
/swagger-ui.html
api/swagger-ui.html
user/swagger-ui.html
/libs/swaggerui
api/swaggerui
/swagger-resources/configuration/uiswagger-resources/configuration/security
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

2.从网络找JS文件含有加载关键字的文件利用:SoapUI&EXP

接口安全设计

请求合法性校验:

Google的CAPTCHA解决方案主要是用来区分人类用户和自动程序(如机器人)。

在完成CAPTCHA后会生成一个唯一的Token,确保后续的请求。

Cookie 验证是服务器在用户登录时生成 用户唯一标识 即 Sessionid 并以映射表的形式保存在该台服务器的内存上(一般做法,也可以保存在其他地方),接着将该 Sessionid 通过 set-cookie 头部传给客户端浏览器保存到 cookie,下次 同源请求 浏览器会自动带上 Sessionid 给服务器,服务器再去查对应的用户 id。

  1. User-Agent和Referer限制

数据合法性校验:数据合法性的校验主要是为了避免异常数据和注入。

\1. 不依赖客户端的数据校验,不管客户端有没有进行数据校验,服务端都要做合法性校验。

\2. 用白名单的方式验证数据合法性,也就是根据一系列已知的正确值或规则来验证请求数据,不尝试检验某些特定的错误。

数据加密:数据加密主要是指对敏感数据进行加密,避免因网络传输过程中的窃听和抓包造成敏感数据泄露,常见方法主要由:使用HTTPS协议。

对敏感数据采用秘钥进行加密和解密。

接口错误处理:接口错误处理主要是值对接口的返回结果进行编码,制定统一的错误返回编码

过载保护**:接口过载保护是指对接口访问频率设置阈值,超出阈值后不予处理,直接返回错误码,可以一定程度上防止C

“请求的API参数”+“时间戳”+“盐”进行MD5算法加密,加密后的数据就是本次请求的签名signature,服务端接收到请求后以同样的算法得到签名,并跟当前的签名进行比对,如果不一样,说明参数被更改过,直接返回错误标识

md5DigestAsHex(urlSign.append(timeStamp).append(salt).toString().getBy
  • 1.