本清单不仅适用于安全评估人员,也适用于API设计、测试和发布过程中的相关人员参考。
认证
- 不要使用basic Auth(基本身份认证),使用standard auth(标准身份认证),比如JWT,OAuth;
- 在身份认证、令牌生成、密码存储方面,不要重造轮子,使用标准的规范和方式;
JWT (JSON Web Token)
- 使用随机的、复杂的密钥(JWT Secret)以抵抗对令牌的暴力破解攻击;
- 不要从JWT的Payload部分提取算法信息,确保算法在后台(HS256 或 RS256);
- 限制Token的过期时间(TTL, RTTL),越短越好;
- 不要在JWT的Payload部分存储敏感信息,它很容易被解码(使用了base64编码);
- 尽可能的使用HTTPS;
OAuth
- 始终验证服务器端redirect_uri地址,可以采取白名单的方式进行控制;
- 通过code而非tokens的方式进行信息交换(禁用response_type=token);
- OAuth认证过程中,state参数中使用一个随机的哈希值,用于防御女CSRF攻击;
- 定义默认范围,并验证每个应用程序的范围参数;
访问
- 对请求进行限制(节流),以地方DDoS/暴力破解攻击;
- 使用HTTPS,以避免MITM(中间人攻击);
- 使用 HSTS,以避免 SSL Strip 攻击;
输入
- 根据实际操作使用适当的HTTP方法,包括:GET (读取), POST (创建), PUT (替换/更新) 和DELETE (删除一条记录);
- 验证请求接受头部(内容协商)中content-type的类型,只允许您支持的格式,例如application/xml , application/json等,如果不匹配,则返回 406 错误;
- 验证POST请求中您接受的content-type的类型,例如 application/x-www-form-urlencoded , multipart/form-data ,application/json等;
- 对用户输入进行验证,以避免常见的漏洞,如 XSS、SQL注入、远程代码执行等;
- 不要在URL中使用任何敏感数据(凭据、密码、安全令牌或API密钥等),使用标准的Authorization header;
处理
- 检测所有端点是否受身份验证保护,以避免有断裂口;
- 应避免使用用户自己的资源ID号,比如,使用 /me/orders 替代 /user/654321/orders;
- 禁止使用自增ID,可以使用UUID替代;
- 解析 XML 文件时,取保实体解析被禁用,以避免 XXE注入攻击;
- 使用CDN进行文件上传;
- 如果需要处理海量数据,可以使用Workers 和 Queues的方式快速响应,以避免HTTP 阻塞;
- 不要忘记关闭DEBUG模式;
输出
- 响应头中,启用:X-Content-Type-Options: nosniff 策略;
- 响应头中,启用:X-Frame-Options: deny策略;
- 响应头中,启用:Content-Security-Policy: default-src‘none’ 策略;
- 对响应的content-type类型进行限制,例如,若返回application/json,则 content-type 应为application/json;
- 不要返回敏感信息,如凭据、密码、安全令牌等;
- 根据完成的操作返回适当的状态码,如200 OK , 400 Bad Request , 401 Unauthorized, 405 Method Not Allowed等;
欢迎大家积极补充!
传送地址:https://github.com/shieldfy/API-Security-Checklist
via:http://mp.weixin.qq.com/s?__biz=MzIxMzQ3MzkwMQ==&mid=2247489531&idx=3&sn=809a990a8e4ca347dc87a3f7472f42d6&chksm=97b718f9a0c091ef321d38f5a62ca8d3c42fa6f53d64b18f237c5ad4526b7709598a248e7aa4&mpshare=1&scene=1&srcid=0416DTvVBVjvbrwmCoM1mQcU#rd