API安全测试检查项小结

现如今开发基本上都是前后端分离,相比前端,后端的测试是最容易发现一些底层bug, 修复成本也低。今天主要聊聊接口的安全测试,以及常见的漏洞。

API安全测试检查项小结

一、逻辑越权类

可以分为两类:
平行越权:权限类型不变,权限对象改变;
垂直越权:权限对象不变,权限类型改变;
举个例子,通过查看请求返回的数据,查看是否通过修改表示身份的字段来做跨权限请求:比如用户个人信息页,是否能通过字段自增去遍历别的用户信息;还有就是某个功能只有A权限用户可以使用,通过接口传B权限用户,验证是否能使用该功能。

二、输入控制类

XXE,Restful API 的注入漏洞,XSS,溢出,特殊字符的处理:
①在请求中,把某个字段的值加上两个单引号('),看是否能够提交到数据库当中,如果能够提交到数据库,那么就存在SQL注入漏洞;
②字段中包含 
<script>alert(1)</script> 提交带有脚本标签的请求,检查是否存在XSS漏洞;
③上传文件接口,如果只能上传图片,不可以上传其他文件或者伪装成图片的可执行文件;
不能只在客户端对输入信息进行校验,服务端也应做校验。

三、接口滥用

废弃、没使用的接口应及时清理。
没有对带有敏感信息的接口限制请求频率,会导致各种爆破和遍历,造成数据泄露,同时接口被滥用也会导致系统资源被消耗,引入其他安全问题。
如短信验证码爆破、登录爆破、手机号遍历、身份证遍历等。

四、信息泄露

通过抓包,检查所请求的接口返回的数据,看有没有包含可利用的字段。
关键参数是否加密:比如登陆接口的用户名和密码是否加密 ;支付接口中,涉及用户的身份证号码、银行卡卡号、银行卡CVV码等之类的信息有无加密。
如果有使用第三方接口,也要检测第三方接口是否会泄露用户信息。
还有错误请求返回不包含敏感信息,如当用户登录失败的时候,不能明确指出是密码错误或者用户不存在,预防暴力撞破用户名或者密码。
服务端返回的任何服务错误信息不要返回给用户。

五、HTTP 响应头控制

发送 X-Content-Type-Options: nosniff 头;
发送 X-Frame-Options: deny 头;
发送 Content-Security-Policy: default-src 'none' 头;
删除指纹头 - X-Powered-By, Server, X-AspNet-Version 等等;
在响应中强制使用content-type,如果你的类型是 application/json 那么你的 content-type 就是 application/json。
不要返回敏感的数据, 如 credentials, Passwords, security tokens。
在操作结束时返回恰当的状态码(如 200 OK, 400 Bad Request, 401 Unauthorized, 405 Method Not Allowed 等等)。

六、防止抓包

应用正式发布的后应该对重要接口进行加密处理,防止第三方代理抓包对用户数据篡改。

七、服务器接口权限验证

服务器是否有对接口请求进行了权限验证。
如果去掉请求中的身份识别信息,判断服务器是否有做校验。



留言