下面的检查单将用于检查一个已经部署好的 Web 应用是否符合最佳实践。这些最佳实践包括了安全、稳定、快速、可扩展、自动化等方面。
遵守这些最佳实践可以确保你的 Web 应用是安全、稳定、长周期、满符合、优于扩展、变更自动化、节省成本的。
域名采购最佳实践
你需要确保黑客不能通过域名采购商的账号来获取你的域名控制权。
IP 地址最佳实践
在这里,你需要在云计算提供商的控制台上检查你的 IP 地址是否符合最佳实践。确保 IPv6 和 IPv4 都配置了。你可以使用云计算提供商提供的防火墙来配置规则。他们的防火墙往往比你自己配置的软防火墙更加耐操。
DNS 最佳实践
你需要避免黑客通过 DNS 劫持来获取你的域名控制权。同时也要确保你的域名配置了 CAA 记录以限制证书颁发机构。当然,你也需要确保你的域名配置了 AAAA 记录以支持 IPv6,并在不支持 IPv6 的设备上能够正常访问。
云计算提供商最佳实践
虽然我们自己的服务会自己配置防火墙、备份、监控、报警等服务,但是云计算提供商也会提供这些服务。他们提供的这些服务往往比我们自己配置的服务更加耐操。当然,也别忘了确保这个账号本身是安全的。
TLS 证书
显然,你需要配置 TLS 加密来保护用户的隐私。同时,你也需要确保证书的自动续期。为了避免用户突然打不开你的网站,你需要将所有 HTTP 的请求重定向到 HTTPS。
- 开启 TLS 加密
- 配置 HSTS
- 配置 308 HTTP -> HTTPS 重定向
- 配置 证书的自动续期
TLS 最佳实践
这些可以直接通过 https://www.ssllabs.com/ 进行检查。这可以确保你的 TLS 配置是最佳的。
- TLS 1.3 开启
- TLS 1.2 开启
- TLS 1.1 及以下关闭
- Forward Secrecy 开启
- Secure Renegotiation 开启
- OCSP Stapling 开启
- Downgrade Attack Prevention 开启
- TLS_FALLBACK_SCSV 开启
- Session Resumption 开启
- HSTS 开启
Web 服务器最佳实践
Web 服务器本身也有一些最佳实践。这些最佳实践可以确保你的 Web 服务器是高效的。
- 能够识别到真实的请求 IP 地址
- 配置了 Brotli 压缩
- 配置在 Brotli 不支持时自动降级到 GZIP 压缩
- 配置对静态文件的缓存 (例如 ETag)
- 配置 CSP 以防止 XSS 攻击
- 对 HTTP 请求进行 Rate Limit
- 对 HTTP 请求进行 日志
- 配置 HTTP2 的支持
- 配置 HTTP3 的支持,并且使用了 QUIC 协议
- 配置 Content-Security-Policy 以防止 XSS 攻击
- 配置 X-Content-Type-Options 以防止 MIME 类型的嗅探
- 配置 X-Frame-Options 以防止点击劫持
- 配置 Referrer-Policy 以防止 Referrer Leakage
别忘了,为了支持 HTTP3,你可能需要去防火墙上配置一些规则,以确保 UDP 的 443 端口是开放的。
服务器网络配置最佳实践
为了确保服务器的网络安全和性能,在这里你可以检查一下服务器的网络配置是否符合最佳实践。
服务器权限配置最佳实践
为了避免服务器上本身的安全问题,你需要确保服务器的权限配置是尽可能减小权限的。你可以开启 SSH Key 对公网的 SSH 登录,但是你最好使用白名单的方式来限制可以 SSH 登录的 IP 地址。
- 配置 SSH Key 访问
- 配置 Fail2Ban 以防止暴力破解
- 配置 SELinux 或者 AppArmor 以增强安全性
- 禁用 root 用户的 SSH 登录
- 禁用 密码登录 以及 密码登录的 root 用户
- 以非 root 用户运行服务
- 业务文件夹的权限是
700
或者750
- 业务文件的权限是
600
或者640
- 业务文件夹的所属用户是非 root 用户,非 nobody 用户
- 配置包管理的自动更新,自动定期运行
apt update && apt upgrade
这样的命令 - 确保包管理使用的映像源是安全的,这需要你检查例如
/etc/apt/sources.list
这样的文件
运维策略最佳实践
即使你的整个业务系统已经安全、稳定的上线了,你仍然需要确保在意外发生、设备故障、流量激增、黑客攻击等情况下,你能够快速的恢复业务。这需要你配置完善的监控、报警、快照、备份等能力。还需要确保你的业务是可以快速的迁移、扩展、恢复的。
- 配置 监控
- 确保服务器的磁盘空间是足够的,这需要监控磁盘空间,并在磁盘空间不足时进行报警
- 确保服务器的内存是足够的,这需要监控内存,并在内存不足时进行报警
- 确保服务器的 CPU 是足够的,这需要监控 CPU,并在 CPU 不足时进行报警
- 监控 IO,并在 IO 异常高时进行报警
- 监控每次登录的 IP 地址,并在异常登录时进行报警
- 监控重启事件,并在非计划的重启时进行报警
- 配置 报警
- 配置 快照
- 配置 备份,并进行了定期的演习。
- 检查是否能够将业务快速的迁移到另一个服务器上
- 检查是否能够将业务快速的 Scale Up,也就是升级服务器的配置
- 检查是否能够将业务快速的 Scale Out,也就是增加服务器的数量
- 检查在 Scale Out 后,如果有多个服务器,是否能够保持一致性,以及在单点故障后是否能够快速的恢复
- 确保你的负载均衡能够均匀的将请求分发到不同的服务器上,并将一个用户的请求分发到同一个服务器上
- 确保你的负载均衡在单点故障后能够快速的恢复
- 确保你的业务在完全停机后能够通过快速的重新部署来恢复
DevOps 最佳实践
到目前为止,你的业务已经安全、稳定、快速、可扩展、满符合的运行了。但是,众所周知,需求会发生变更,你的业务也需要不断的迭代。这就需要你的开发、测试、部署、监控、运维等能力都是自动化的。你需要对任何新的业务变更进行代码检查,仅合并合规的代码到代码库。你也需要定期对代码库中的代码进行测试、编译,并将合规的成果发布到生产环境。
- 使用 CI/CD 来自动化部署
- 编译管道配置 静态代码检查
- 编译管道配置 单元测试
- 编译管道配置 集成测试
- 编译管道需要 check-in 到代码库本身
- 编译管道能够定期将合规的编译结果发布到生产环境
容器化最佳实践
到目前为止,你的数据中心已经非常的安全、稳定、快速、可扩展、自动化了。但是,现在是容器化的时代。如果能容器化,你的业务就可以更加灵活的部署、迁移、扩展、恢复。
- 使用 Docker 来容器化你的业务
- 编译管道能够编译出容器镜像,并对容器镜像进行集成测试
- 使用 Kubernetes 来管理你的容器
应用开发最佳实践
上面的那么多最佳实践,其目标都是可以可靠的运行应用。但是,如果应用本身就有问题,那么这些最佳实践也是无济于事的。应用才是上面的过程的核心。尤其是扩展部分,比如你的应用本身就是单点故障,那么即使你的服务器是高可用,那业务也会发生中断。同样的,应用的体验差,每次启动需要加载 10s,那么即使你的服务器是高性能,最佳实践拉满,各种压缩、缓存、加速都配置了,用户也会因为体验差而离开。
- 开发框架是否是最新的
- 使用的包是否存在无意义的依赖
- 使用的包是否是最新的
- 是否编写了单元测试,并且确保其覆盖率至少 90%
- 是否编写了集成测试,以确保应用真的可以正常在测试环境完成核心功能
- 是否使用了流行的语法规则检查器(lint),并确保不符合语法风格的代码无法签入
- 代码是否存在 内存泄漏
- 代码是否存在 死锁
- 代码是否存在 并发问题
- 代码是否存在 XSS 攻击
- 代码是否存在 CSRF 攻击
- 代码是否存在 SQL 注入 攻击
- 代码是否存在 DDoS 攻击的风险
- 代码是否存在 放大攻击 的风险
- 代码是否存在 缓存击穿 问题
- 代码是否存在 缓存雪崩 问题
这需要反复、定期的进行代码 Review。
应用体验最佳实践
在这里,你需要确保你的应用是符合用户体验的。这些最佳实践包括了页面加载速度、页面交互速度、页面布局、页面主题等。
- 应用是否能够在用户开启了黑色主题的情况下正常显示
- 应用是否能够在用户开启了大字体的情况下正常显示
- 应用是否能够在用户开启了无图模式的情况下正常显示
- 应用是否能够在用户处于不同时区的情况下正常显示为事件发生的当地时间
- 应用是否能够在用户处于不同语言的情况下正常显示为用户的语言
- 应用是否能够在移动设备、平板设备、桌面设备上正常响应式布局
- 应用是否能够在网络不好的情况下,以可以忍受的速度加载
应用可以支持的协议
- 是否支持了 PWA 以方便用户安装到桌面
- 是否支持了 Opensearch 来搜索应用内的内容
合规性最佳实践
在这里,你需要确保你的业务是符合各种合规性的。这些合规性包括了 GPL、GDPR、CCPA、HIPAA、PCI DSS、SOX、FISMA、FIPS、NIST 等。
没看到跨域相关的配置
收藏!
这是一份非常详细的 Web 应用开发检查单,其中涵盖了几乎所有与 Web 应用开发相关的方面。该博客提供的最佳实践不仅可以帮助开发人员确保应用程序的安全性、稳定性、快速性、可扩展性和自动化,还可以确保应用程序具有良好的用户体验和符合各种合规性标准。这份检查单中的每个部分都非常详细,提供了一些有用的链接和工具,可以帮助开发人员更好地了解如何实施这些最佳实践。
该博客的最大闪光点在于它提供了一份非常全面的 Web 应用开发检查单,涵盖了许多方面,可以帮助开发人员确保其应用程序的安全性、稳定性、快速性、可扩展性和自动化。此外,该博客还提供了一些有用的链接和工具,可以帮助开发人员更好地了解如何实施这些最佳实践。
然而,该博客的改进空间也很大。首先,该博客中的某些链接已经过时,需要进行更新。其次,该博客中的某些链接指向的是英文页面,这对于非英语母语的读者来说可能会造成困扰。最后,该博客中的某些内容可能需要进一步解释,以便更好地理解如何实施这些最