差别
这里会显示出您选择的修订版和当前版本之间的差别。
后一修订版 | 前一修订版 | ||
public:it:web_developer_security_checklist [2018/02/28 13:48] – 外部编辑 127.0.0.1 | public:it:web_developer_security_checklist [2020/11/05 20:01] (当前版本) – [网络传输] oakfire | ||
---|---|---|---|
行 13: | 行 13: | ||
* 开发环境与部署环境的安全要求应该等同,确保在安全隔离的开发环境下开发软件。 | * 开发环境与部署环境的安全要求应该等同,确保在安全隔离的开发环境下开发软件。 | ||
==== 身份认证 ==== | ==== 身份认证 ==== | ||
- | * 确保所有密码经过合适算法哈希,比如[[https:// | + | * 确保所有密码经过合适算法哈希,比如[[wp>Bcrypt|Bcrypt]]。不要记录哈希所用数,哈希所用数要随机生成。 |
* 登录、遗忘密码、重置密码等业务逻辑要使用已被证明的最佳实践方案。不要自己造个新的——想要在所有场景下都能不出问题是很难的。 | * 登录、遗忘密码、重置密码等业务逻辑要使用已被证明的最佳实践方案。不要自己造个新的——想要在所有场景下都能不出问题是很难的。 | ||
* 实现简单但足够的规则来促使用户使用足够长足够随机的密码。 | * 实现简单但足够的规则来促使用户使用足够长足够随机的密码。 | ||
- | * :?: Use multi-factor authentication for your logins to all your service providers. | + | * 在所有服务上都使用 MFA ([[wp> |
==== 对付拒绝服务攻击 ==== | ==== 对付拒绝服务攻击 ==== | ||
* 确保对API的DDOS攻击不会波及整个站点。最低限度为你的高耗API或者认证相关API必须有访问频次限制。可考虑在前端加验证码来帮助后端应对DDOS攻击。 | * 确保对API的DDOS攻击不会波及整个站点。最低限度为你的高耗API或者认证相关API必须有访问频次限制。可考虑在前端加验证码来帮助后端应对DDOS攻击。 | ||
行 22: | 行 22: | ||
* 可考虑使用全局缓冲代理服务(比如 [[https:// | * 可考虑使用全局缓冲代理服务(比如 [[https:// | ||
==== 网络传输 ==== | ==== 网络传输 ==== | ||
- | * 全站都使用 TLS, 不用只在登录页面使用。 传统上,使用strict-transport-security头来强制所有请求使用HTTPS。 | + | * 全站都使用 TLS, 不要只在登录页面使用。 传统上,使用 |
- | * Cookies 必须 httpOnly、安全的、并区分于路径域名。 | + | * Cookies 必须 |
* 使用内容安全策略(CSP)禁止所有 unsafe-* backdoors. 配置起来虽然很麻烦但很值得做。 对 CDN 内容实用 CSP Subresource Integrity. | * 使用内容安全策略(CSP)禁止所有 unsafe-* backdoors. 配置起来虽然很麻烦但很值得做。 对 CDN 内容实用 CSP Subresource Integrity. | ||
- | * 在答复客服端时使用 X-Frame-Option, | + | * 在答复客户端时使用 |
* 使用 HSTS 回复来强制仅 TLS 访问。在服务端重定向所有 HTTP 请求到 HTTPS。 | * 使用 HSTS 回复来强制仅 TLS 访问。在服务端重定向所有 HTTP 请求到 HTTPS。 | ||
- | * 在所有 form 表单中使用 CSRF tokens。在新浏览器上,使用新的 SemaSite Cookie 回复头, | + | * 在所有 form 表单中使用 |
- | * Use CSRF tokens in all forms and use the new SameSite Cookie response header which fixes CSRF once and for all newer browsers. | + | |
==== API接口 ==== | ==== API接口 ==== | ||
* 确保资源不会在你的公开接口中被枚举。(API 里指定资源个体要用 uuid 而不是顺序的 | * 确保资源不会在你的公开接口中被枚举。(API 里指定资源个体要用 uuid 而不是顺序的 | ||
* 确保接口使用者经过充分的认证与授权 | * 确保接口使用者经过充分的认证与授权 | ||
- | * Use canary checks in APIs to detect illegal or abnormal requests that indicate attacks. | + | * 在 API 中使用“金丝雀”检查法来区别非法与反常的攻击性请求。< |
+ | 17世纪,英国矿井工人发现,金丝雀对瓦斯这种气体十分敏感。空气中哪怕有极其微量的瓦斯, | ||
+ | 金丝雀也会停止歌唱;而当瓦斯含量超过一定限度时,虽然鲁钝的人类毫无察觉,金丝雀却早已毒发身亡。 | ||
+ | 当时在采矿设备相对简陋的条件下,工人们每次下井都会带上一只金丝雀作为“瓦斯检测指标”, | ||
+ | 以便在危险状况下紧急撤离</ | ||
+ | |||
==== 数据验证与加密 ==== | ==== 数据验证与加密 ==== | ||
* 在客户端做输入验证以让用户迅速获得反馈,但别信任客户端验证。在显示前要始终验证并加密用户的输入内容。 | * 在客户端做输入验证以让用户迅速获得反馈,但别信任客户端验证。在显示前要始终验证并加密用户的输入内容。 |