面试被问到:你们的接口有加密嘛?加密的接口是怎么测试的?

回答思路:

1. 理解加密机制:首先,找开发人员确定加密的方式,并了解整个加密流程和细节。

2.设计测试策略:根据加密方式,设计测试方案,包括工具选择和脚本编写。

3. 执行测试:利用工具或代码实现加密,然后发送请求并验证结果。

4. 验证与断言:不仅测试正常情况,还要测试异常情况。

第一步:与开发沟通理解加密规则和细节

⭐ 使用了那种加密算法(如MD5、AES、RSA等)

⭐ 加密的流程,比如哪些参数需要加密,加密的密钥是什么,是否有时间戳、随机字符串等防重放机制

⭐ 如果是签名机制,了解签名的生成规则(比如参数排序、拼接方式等)。

第二步:选择工具与脚本开发

⭐ 如果使用Postman,我会在Pre-request Script中编写JavaScript代码来实现加密和生成签名。例如,对于MD5签名,我可以使用Postman内置的CryptoJS库。

⭐ 如果使用JMeter,我可能会使用JSR223 PreProcessor来编写Groovy脚本实现加密。

⭐ 如果加密非常复杂,或者需要集成到自动化测试框架中,我可能会选择用Python的Requests库结合加密库(如hashlib, pycryptodome)来编写测试脚本。

第三步:设计并执行测试用例

⭐ 在工具中,我会按照加密规则对请求参数进行处理,然后发送请求。

⭐ 对于返回结果,如果响应也是加密的,我还会按照开发提供的解密方式对响应进行解密,然后再进行断言验证。

第四步:结果验证与调试

正向以及逆向场景:

⭐ 签名错误:故意修改签名值,验证服务端是否会返回正确的错误码(如签名无效)。

⭐ 重放攻击:重复发送一个相同的合法请求,验证服务端是否有时间戳和随机数机制来防止重放。

⭐ 篡改参数:在签名正确的基础上,篡改其中一个业务参数,验证服务端签名校验是否生效。

⭐ Token失效:使用一个过期的或伪造的Token,验证认证是否失败。

    对于返回结果,如果响应体也是加密的,我同样会按照约定进行解密后再做断言。在调试过程中,如果发现服务端返回的加密错误,我会通过对比我生成的签名和服务端生成的签名日志(如果需要开发协助拉日志),来定位是哪个环节出了偏差。


总结回答(简短)

    首先,和开发明确加密的规则和细节。根据加密的复杂程度,选择Postman或JMeter等工具来模拟加密过程,最后设计包括正向、逆向在内的测试用例来进行全面验证。核心思想是,不仅要让接口‘跑通’,更要验证其加密机制的安全性和健壮性。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容