涨薪技术|掌握带安全认证的接口测试
接口安全测试通常包括以下几种身份验证和授权测试测试接口是否正确实现了身份验证和授权以防止未授权访问或不合法的访问。输入验证测试测试接口是否正确验证输入参数以防止非法输入参数和SQL注入攻击等。输出验证测试测试接口是否正确输出预期的数据并且数据没有被篡改。会话管理测试测试接口是否正确实现了会话管理以防止会话劫持等攻击。数据保护测试测试接口是否在传输和存储数据时采取了适当的加密和保护措施以防止数据泄漏。异常处理测试测试接口是否正确处理异常情况以防止拒绝服务攻击和系统崩溃。安全配置测试测试接口是否正确配置了安全相关的参数以防止漏洞被利用。接口集成测试测试接口在与其它系统集成时是否存在漏洞和安全问题。01接口安全策略一、Session/Cookie1. 服务器在接受客户端首次访问时在服务器端创建session并保存(可以将seesion保存在内存中也可以保存在Redis)然后给这个session生成一个唯一的标识字符串sid在响应首部中带上该字符串。2. 签名。这一步通过秘钥对sid进行签名处理避免客户端修改sid。(可选)3. 浏览器中收到请求响应的时候会解析响应头然后将sid保存在本地cookie中浏览器在下次http请求的请求头中会带上该域名下的cookie信息。4. 服务器在接受客户端请求时会去解析请求头cookie中的sid然后根据这个sid去找服务器端保存的该客 户端的session然后判断该请求是否合法。二、Token2.1Acesss Token访问资源接口API时所需要的资源凭证;简单 token 的组成uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign签名token 的前几位以哈希算法压缩成的一定长度的十六进制字符串特点①支持跨域访问Cookie auth 是不允许跨域访问的但是 Token auth是可以的只需要将用户认证信息通过 HTTP 头出入即可。② 无状态(服务器可扩展性)Token机制在服务器端不需要存储Session信息因为在Token中包含了所有的登陆用户信息只需要在客户端的cookie或者本地介质中存储状态信息。③ 要适用CDN可以通过内容分发请求你服务端的所有资料(如js、html、图片等)而在服务端只需要提供 API 即可。④ 去除耦合性Token可以在任何的地方生成所以不需要绑定到一个特定的身份认证方案只要在调用你的 API 时你可以进行Token的生成调用即可。⑤ 适用于移动应用Cookie 是不能在原生平台(IOS、Android、Windows8等)上被支持的(需要通过Cookie容器来处理)而此时使用Token机制会方便很多⑥ CSRF(跨站请求伪造)因为Token本身是不依赖与Cookie的所以不需要考虑CSRF的防范。⑦ 性能Cookie认证需要在一次网络往返中通过数据库查询Session信息而Token只需要进行一次的 hmacsha256 的计算因此在性能上会好很多。⑧ 基于标准化你的API可以采用标准化的 JSON Web Token (JWT). 这个标准已经存在多个后端库(.NET, Ruby, Java,Python, PHP)和多家公司的支持(如Firebase,Google, Microsoft)token 的身份验证流程1. 客户端使用用户名跟密码请求登录2. 服务端收到请求去验证用户名与密码3. 验证成功后服务端会签发一个 Token再把这个 Token 发送给客户端4. 客户端收到 Token 以后可以把它存储起来比如放在 Cookie里或者 Local Storage 里5. 客户端每次向服务端请求资源的时候需要带着服务端签发的Token6. 服务端收到请求然后去验证客户端请求里面带着的Tokenrequest头部添加Authorization如果验证成功就向客户端返回请求的数据如果不成功返回401错误码鉴权失败。每一次请求都需要携带 token需要把 token 放到 HTTP 的Header 里基于 token 的用户认证是一种服务端无状态的认证方式服务端不用存放 token 数据。用解析 token 的计算时间换取 session 的存储空间从而减轻服务器的压力减少频繁的查询数据库token 完全由应用管理所以它可以避开同源策略2.2Refresh Tokenrefresh token 是专用于刷新 access token 的 token。如果没有refresh token也可以刷新 access token但每次刷新都要用户输入登录用户名与密码会很麻烦。有了 refresh token可以减少这个麻烦客户端直接用 refresh token 去更新 access token无需用户进行额外的操作。Access Token 的有效期比较短当 Acesss Token 由于过期而失效时使用 Refresh Token 就可以获取到新的 Token如果 RefreshToken 也失效了用户就只能重新登录了。Refresh Token 及过期时间是存储在服务器的数据库中只有在申请新的 Acesss Token 时才会验证不会对业务接口响应时间造成影响也不需要向 Session 一样一直保持在内存中以应对大量的请求。三、Oauth2.0OAuth 2.0 是目前最流行的授权机制用来授权第三方应用获取用户数据。(应用中集成第三方登录微信QQ微博等等)四种授权方式授权码authorization-code隐藏式implicit密码式password客户端凭证client credentials02安全认证接口实战1. 发送登录请求请求返回sid或token 2. 使用后置处理器比如正则表达式提取器JSON提取器等提取 sid或token 3. 将提取的sid或token在后续的请求中发送给服务器 附加sid或token的方式。 sid放在cookie首部 使用cookie管理器 使用header管理器。 在JMeter中Cookie不能跨线程组。若要跨线程组需要 将sid保存到属性中。 token: 放在cookie首部少见 放在header管理器中 Authorization: token_value token: token_value