安全问题主要由以下两类原因导致:
- 那些刚入门的无法区分 MD5 和 bcrypt 作用的开发者
- 那些知道这件事但忘记/忽略了的开发者
我们的详细说明应该可以帮到第 1 类开发者,而我们希望我们的 checklist 可以帮到第 2 类的开发者构建更多的安全系统。这并不是一个综合性的全面指南,只是覆盖了大多数我们在过去发现的常见问题。
- 安全Checklist
- 什么东西会出问题?
- 安全地传输数据: HTTPS 详解
- 权限验证: 我是谁?
4.1 基于表单的权限验证
4.2 基础鉴权
4.3 一次是不够的、二次、三次(验证)....
4.4 为什么使用不安全的文本消息? HOTP & TOTP 介绍
4.5 处理密码重置 - 权限验证: 我能做什么?
5.1 基于 Token 的权限验证
5.2 OAuth 和 OAuth2
5.3 JWT(JSON Web Token) - 数据校验和过滤: 绝不信任用户输入
6.1 校验和过滤用户输入
6.2 过滤输出
6.3 跨站脚本攻击(XSS)
6.4 注入攻击
6.5 用户上传
6.6 用户篡改输入 - 纯文本 != 编码 != 加密 != 哈希
7.1 通用编码模式
7.2 加密
7.3 哈希和单向函数(功能)
7.4 哈希速度对照表 - 密码: dadada、123456、cute@123
8.1 密码策略
8.2 密码存储
8.3 没有密码的生活 - 公钥加密
- 会话: 请记住我
10.1 哪里存储状态?
10.2 使会话失效
10.3 Cookie 怪物和你 - 加固安全, 一次只有一个头信息
11.1 安全的 web header
11.2 第三方代码的数据集成检测
11.3 证书绑定 - 配置错误
12.1 云上准备: 端口、Shodan、AWS
12.2 亲,你开了 debug 模式
12.3 日志(或者没有日志)
12.4 监控
12.5 最低优先级原理
12.6 (请求)频率限制 和 Captchas
12.7 把项目的密钥和密码保存在文件上
12.8 DNS: 关于子域名和被遗忘的宠物计划
12.9 打补丁和更新 - 攻击: 当坏人来临
13.1 点击劫持
13.2 跨站请求伪造
13.3 拒绝服务
13.4 服务端请求伪造 - 互联网公司漏洞统计
- 重造轮子,但做出来是方的
15.1 Python 的安全库和包
15.2 NodeJS 的安全库和包
15.3 学习资料 - 掌握良好的安全习惯
- 安全性 vs 可用性
- 回到第 1 条: 安全 Checklist 解释
我们是全栈开发工程师,讨厌看到那些所谓为了做某件事情而 hack,但写了一堆不安全代码的开发者。在过去六个月,我们保护了超过 1500w 信用卡信息不被泄露,超过 4500w 的用户个人信息不被盗取,潜在的拯救了大量公司的倒闭。最近,我们发现的一个安全问题,可以导致一家比特币交易公司因数据泄露而倒闭。我们帮助了若干创业公司让他们的系统更安全,大多数都是免费的,有时候甚至连『谢谢』都没收到 :)
如果你不同意我们的观点或者找到 bug,请开启一个 issue 或者提交一个 PR 给我们。另外,你也可以通过 hello@fallible.co 与我们交流。