接口安全测试
一、后台接口分类
1、接口类别:restful(json) soap(xml)
2、协议 :http https(ssl)
3、restful接口请求类型
get操作是安全的
post的操作是不安全的 同put
delete也是不安全的
4、现状和问题
大部分APP的接口都采用restful架构,restful最重要的一个设计原则就是客户端与服务端的交互在请求之间是无状态的。大部分都采用token的认证方式。
token分别在两台手机上登陆微信
二、接口安全设计原则
1、接口类型尽量使用https带SSL证书模式
2、接口参数使用签名(非对称加密算法)
3、接口参数需要校验
注册:注册机
4、每次请求需要用户命令
5、多次失败后需要有锁定机制
6、接口对应用户权限,用户只能调用有权限的接口
用户的权限
接口权限:系统有多个模块,每个模块有多个接口,我只购买了2个模块的服务,只分配两个模块的接口来使用---license
7、系统接口做过负荷机制用来保护系统安全
过负载----保护系统,再好的系统也有瓶颈,超过请求后提示系统忙
(1)提交请求后立即提示系统忙
(2)提交请求后一段时间后提示系统忙
静态:
动态:
三、接口安全设计注意事项:
1、对用户任何输入的都需要注意
2、不能只在客户端进行校验
3、服务端返回的任何服务错误信息不要返回给用户
四、常用接口安全测试类
1、sql注入
(1)sql拼接:jdbc/obdc ----链接数据库
select * from userInfo where userId=1 ---查询id为1的用户
sql = sql + condition
(2)使用第三方组件,比如java里面的hibernate,ibatis,jpa
通过各种sql查询业务信息,甚至破坏系统表
(3)sql注入注意事项:
1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和双"-"进行转换等。
2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装
2、xss攻击
(1)描述:利用XSS的攻击者进行攻击时会向页面插入恶意Script代码,当用户浏览该页面时,嵌入在页面里的Script代码会被执行,从而达到攻击用户的目的。同样会造成用户的认证信息被获取,仿冒用户登录,造成用户信息泄露等危害
(2)安全风险:文字中可以输入js脚本,例如<script src=‘wrong URL’></script>这种有安全性的脚本,其它用户进入后可以获取该用户的cookie信息,即可以对该用户资源进行操作
3、越权访问
(1)描述:在一个产品中,一个正常的用户A通常只能够编辑自己的信息,别人的信息无法查看或者只能查看的权限,但是由于程序不校验用户的身份,A用户更改自己的id值就进入了B用户的主页,可以查看、修改B用户的信息,这种漏洞我们就将其称之为越权漏洞
(2)举例:用户登录app成功,系统记录用户id,例如userid为1。
安全风险:此时用户通过工具发送消息将userid设置为2后可能登陆成功,及用户可以通过修改userid来访问其它用户资源,引发严重问题。
4、csrf 请求伪造
(1)描述:CSRF是一种对网站的恶意利用,过伪装来自受信任用户的请求来利用受信任的网站。
(2)举例:在APP上打开某个网站时,突然弹出您已经中奖的提示和链接
安全风险:点开链接后会跳转到对应异常界面,并且用户本地信息可能已经被获取,如果在跳出界面进行相关操作,比如银行相关操作会引起更大的安全问题和严重损失。
(3)安全防护
1. 使用post,不使用get修改信息
2. 验证码,所有表单的提交建议需要验证码
3. 在表单中预先植入一些加密信息,验证请求是此表单发送
learn to fail, failure to learn