做接口自动化是网站登录加密 这事儿,搞过的人都知道有多搞心态。别听那些卖课的吹什么“一键生成脚本”,真到了线上环境,尤其是那种加了密、带了签名的登录接口,你连门都摸不着。
我前阵子接手个项目,测试个电商后台,登录接口直接给你整了个RSA非对称加密,参数还得拼个动态时间戳和签名。刚开始我傻乎乎地用Postman试,传明文过去,好家伙,直接返回“签名错误”。那时候心里真是一万头草泥马奔腾。很多新手这时候就慌了,觉得是不是自己代码写错了,或者工具不行。其实根本不是那回事,是人家前端做了手脚。
咱们得先搞清楚逻辑。浏览器是怎么登录的?第一步,你输入账号密码,前端JS代码把这两个字符串拿出来,用公钥加密;第二步,前端再搞个时间戳,跟加密后的密码拼一起,用私钥或者特定算法算个签名;第三步,把加密密码、签名、时间戳一起发给后端。后端拿到后,用同样的逻辑验签,签对了再解密密码比对数据库。
你看,这链条多完整。你做接口自动化,要是直接跳过前端,想直接调接口,那肯定报错。因为后端校验签名时,发现你的时间戳不对,或者解密出来的密码跟数据库里存的不一样,直接拒之门外。
那咋办?硬刚吗?当然不是。我有三个实在招,能帮你把这层皮扒下来。
第一步,抓包分析,别急着写代码。先用Charles或者Fiddler抓个正常的登录包。注意,别只看请求参数,要看Network里的Payload。你会发现,密码字段是一串乱码,那肯定就是加密后的。这时候,去F12开发者工具里,搜那个加密函数名。通常叫encrypt、encode或者cipher之类的。
第二步,定位加密逻辑。找到JS文件后,别急着看源码,太乱。直接打断点。在浏览器里,给那个加密函数下断点。然后重新登录,浏览器就会停在那行代码上。这时候,你可以观察入参和出参。比如,入参是明文密码,出参是密文。你可以试着在控制台手动调用这个函数,看看能不能复现。如果行,那恭喜,你拿到钥匙了。
第三步,封装自动化脚本。既然知道了前端怎么加密,你在Python或Java里就得模拟这个过程。用对应的加密库,比如Python的pycryptodome,去实现同样的RSA加密算法。注意,公钥通常在前端JS里是明文写的,或者在某个初始化接口里返回的,你得把它抓出来,硬编码到你的自动化脚本里。签名算法同理,照着JS里的逻辑写一遍。
这里有个坑,时间戳。有些系统对时间戳精度要求极高,差几秒就报错。所以,你在脚本里生成时间戳时,得确保跟服务器时间同步,或者干脆从响应头里拿服务器返回的时间戳,再减去几秒作为请求时间,这样更稳。
还有个细节,别忽略Cookie。登录成功后,服务器会返回Session ID或者Token,这个得存下来,后续请求都得带上。不然你登进去了,刷新个页面又得重新登录,自动化流程就断了。
我见过太多人,为了省事,直接用Selenium去模拟点击登录。看着挺省事,其实慢得要死,还容易因为页面加载慢导致定位失败。做接口自动化,核心就是绕过UI,直接跟后端对话。但前提是,你得懂前端的“暗语”,也就是加密逻辑。
别怕麻烦,第一次逆向确实头疼,但一旦打通,后面成千上万的用例跑起来,那速度是UI自动化的几十倍。而且,接口测试更稳定,不受页面样式变更影响。
如果你现在正卡在某个加密接口上,搞不定签名,或者不知道去哪找加密函数,别自己在那死磕了。这种细节问题,有时候就差那么一层窗户纸。你可以把你的抓包数据脱敏后发给我看看,我帮你看看是哪里卡住了。毕竟,实战经验这东西,书本上学不来,得靠一个个坑填出来。
本文关键词:做接口自动化是网站登录加密