假如能依照本文的这个清单来实践,就能将 *** 安全方面的危险降得很低。
Web开发人员安全清单
在云端开发安全又强健的 Web 运用十分难。假如你以为这很简略,那你技术水平要么现已很牛叉,要么还没有踩过坑。
假如你盲目承受 最简可行产品 (Minimum Viable Product,简称 MVP),而且以为你能在一个月之内创立一个既有价值又安全的产品,那么在你推出你的“产品原型”前,你还需求多想想。在你查看了下面的清单之后,承认你不会犯这些严峻的安全问题。至少,你要对你的潜在用户坦白,让他们知道你还没有一个完好的产品,而且只供给一个没有全面安全的原型。
这个清单很简略,而且也不是那种大而全的。我现已开发安全的 Web 运用有 14 年多了。这个清单包含了一些相对重要的问题。这些问题都是我在这段时刻学到的,而这个进程也是苦楚的。当你在创立 Web 运用时,我期望你能够认真地对待这些问题。
假如在这个清单中,你有我没有说到的项目,请留言弥补。
数据库
[ ] 能够辨认用户的数据和敏感数据(如拜访令牌、电子邮件地址或账单信息)需求加密。
[ ] 假如你的数据库在歇息状况时支撑低成本加密(如 AWS Aurora ),那么发动该功能来维护硬盘上的数据。一起也要保证一切备份都是被加密存储的。
[ ] 给用户更低拜访权限的账户。不要运用数据库的 root 账户。
[ ] 故意规划一个密钥库,用它存储和分发秘要内容。不要硬编码到你的运用中。
[ ] 通过只运用 SQL 预处理句子(prepared statements)的办法来彻底避免 SQL 注入。比方:假如要运用 NPM,不要运用 npm-mysql,而是运用 npm-mysql2,由于它支撑预处理句子。
开发
[ ] 关于每个发布的版别,保证软件的一切组件都通过了缝隙扫描。组件指的是操作体系、库和包。这应该自动地进入继续集成/继续交给流程。
[ ] 保证开发体系的安全。相同的,关于你运用的产品体系,也需求坚持相同的警觉。在安全、阻隔的开发体系中开发软件。
认证
[ ] 保证一切暗码都通过适宜的加密办法(如 bcrypt )的散列处理。永久不要自己完成加密办法,而且用好的随机数据来正确地初始化加密办法。
[ ] 在完成登录、忘掉暗码、暗码重置等功能时,用通过验证过的更佳完成或组件。不要重复造轮子,由于你很难保证其在一切场景中都不会出现问题。
[ ]遵从简略且适宜的暗码规矩,鼓舞用户运用较长的随秘要码。
[ ] 你们供给的一切服务,用多重认证来验证登录。
拒绝服务防护
[ ]保证网站不会因 API 遭拒绝服务进犯(DOS)而瘫痪。至少,在相对较慢的 API 途径上(像登录和 Token 生成程序)设置频率约束器。
[ ] 对用户所提交的数据和恳求,在巨细以及结构这两点上履行合理的约束。
[ ] 通过运用大局缓存署理服务(相似 CloudFlare )来躲避分布式拒绝服务(DDOS)。假如网站遭到 DDOS 进犯,你就能翻开这个服务和其他相似的,以作 DNS 查询。
*** 流量
[ ] 整个网站都运用 TLS,不仅仅是登录表单和呼应。 永久不要只在登录表单中运用 TLS。
[ ] Cookie 有必要设置 httpOnly、安全、被途径和域约束。
[ ] 运用内容战略安全( CSP ),而且不允许 unsafe-*(*是通配符)后门。尽管装备时很苦楚,但这是值得做的。
[ ] 在客户端的呼应头中运用 X-Frame-Option、X-XSS-Protection。
[ ] 运用 HSTS 呼应强制仅限 TLS 拜访。在服务器上重定向一切 HTTP 恳求到 HTTPS,作为代替计划。
[ ] 在一切的表单中运用 CSRF 令牌(Token)。运用新的 SameSite Cookie 呼应头,这彻底解决了一切较新浏览器上的 CSRF 问题。
API
[ ] 保证揭露 API 中没有可枚举的资源。
[ ] 保证用户通过全面的认证,而且具有恰当权限的用户才干拜访 API。
[ ] 在 API 中运用随机查看,以检测潜在进犯的不合法或反常恳求。
验证
[ ] 为了给用户快速的反应,能够在客户端做输入合法性验证,可是永久不要信任用户的输入数据。
[ ] 在服务器端运用白名单,来验证一切用户的输入。永久不要直接将用户的内容添加到呼应中。永久不要在 SQL 句子中运用用户输入的内容。
云装备
[ ] 保证一切的服务翻开尽或许少的端口。当隐晦式安全(security through obscurity)没有维护的作用时, 将默许的端口替换成非标准的端口,这样能够让进犯者更难攻破。
[ ] 将后端数据库和服务托管到私有 VPC 上 (虚拟私有云),而 VPC 不能被任何公共 *** 拜访。当你在装备 AWS 安全组和对等 VPC 时,你需求十分细心,由于这或许导致服务无意中对外部敞开。
[ ] 在阻隔 VPC 和对等 VPC 里阻隔逻辑服务,以便支撑跨服通讯。
[ ] 保证一切服务接纳的数据,来自于一个尽或许小范围内的 IP 地址。
[ ] 约束出站 IP 和端口流量,更大极限地削减 APT 进犯带来的损失和“通讯”。
[ ] 一直运用 AWS 拜访办理(IAM)这个身份,而不是 root 凭证。
[ ] 颁发一切操作和开发人员最小的拜访权限。
[ ] 依据时刻表定时地替换暗码和拜访密钥。
[1] [2] 黑客接单网