送你一份API安全评估核查清单

漏洞分析 7年前 (2017) 阿Q
1,467 0

此份清单对于参与API设计、测试和发布过程的相关安全评估人员而言非常重要,大家可以根据清单核查自身行为!

认证

不要使用Basic Auth(基本身份认证),而要使用standard authentication(标准身份认证,例如JWT,OAuth);

在身份认证、令牌生成、密码存储过程中不要重造轮子,必须使用标准的规范;

在登录中使用Max Retry和jail功能;

对所有敏感数据进行加密处理;

JWT (全称JSON Web Token)

使用一个随机的、复杂的密钥(JWT密钥)来增加暴力破解令牌的难度;

不要从JWT的有效载荷中提取算法,在后端强制执行算法(HS256 or RS256);

限制Token的过期时间(TTL,RTTL),越短越好;

不要将敏感数据存储在JWT的有效载荷中,因为它可以很轻松地被解码;

OAuth

始终验证服务器端redirect_uri地址,确定其只允许白名单的网址进去;

通过code(代码)而不是tokens(令牌)的方式进行信息交换(禁用response_type=token);

在state参数中使用一个随机的哈希值,来防止OAuth认证过程中发生CSRF攻击行为;

定义默认范围,并验证每个应用程序的范围参数;

访问

限制请求(节流),以避免DDoS/暴力破解攻击;

在服务器端使用HTTPS来避免中间人攻击(MITM);

使用带有SSL的HSTS标头,来避免SSL Strip攻击(一种中间人攻击);

输入

根据实际操作使用适当的HTTP方法:GET(读取)、POST(创建)、PUT(替换/更新)以及DELETE(删除记录),如果请求的方法无法对应请求的资源,则使用“405错误(方法不被允许)”进行响应;

验证请求接受标头(内容协商)中的content-type(内容类型),只允许你支持的格式(例如application/xml、application/json等),如果不匹配,则返回“406 错误(无法接受请求)”;

验证发布数据中你接受的内容类型(例如 application/x-www-form-urlencoded、multipart/form-data、application/json等);

验证用户输入以避免一些常见的漏洞(例如XSS、SQL注入以及远程代码执行等);

请勿在链接中使用任何敏感数据(凭据、密码、安全令牌或API密钥等),而要使用标准的Authorization header(认证标头);

处理

检测所有端点是否受到身份验证保护,以避免身份验证过程中断;

用户应该避免使用自己的资源ID。应该选择使用/me/orders 替代 /user/654321/orders;

禁止使用自增ID,可以使用UUID替代;

如果你正在解析XML文件,请确保未启用实体解析,以避免遭受XXE(XML外部实体攻击);

如果你正在解析XML文件,请确保实体扩展功能未启用,以避免遭受递归实体扩展攻击(这种方式也被称之为“XML Bomb”或是“Billion Laughs Attack”);

使用CDN进行文件上传;

如果你需要处理的数据量很大,请尽可能在后台使用Workers 和 Queues的方式进行快速响应,以避免HTTP阻塞;

不要忘记关闭DEBUG模式;

输出

发送X-Content-Type-Options:nosniff 标头;

发送X-Frame-Options:deny标头;

发送Content-Security-Policy:default-src‘none’ 标头;

对响应的内容类型进行限制,如果你返回application/json,那么你的响应内容类型应为application/json;

不要返回凭据、密码、安全令牌等敏感数据;

根据已经完成的操作返回适当的状态码。(例如200 OK、400 Bad Request、401 Unauthorized、405 Method Not Allowed等);

CI(持续集成)& CD(持续交互)

使用unit/integration(单元/集成)测试来审核你的设计和实施活动;

启用代码审查程序,避免盲目自信;

确保你服务器上的所有组件在进入生产之前都通过AV软件进行了静态扫描,包括供应商库(libraries)和其他依赖项;

为部署过程设计一个回滚(rollback)的解决方案。

版权声明:阿Q 发表于 2017-11-15 23:41。
转载请注明:送你一份API安全评估核查清单 | 安全库

相关文章