在云端开发安全、坚固的web程序是一件非常苦难的事情。如果你觉得它很简单,要么你是个高手,要么你未来就会遇到大问题。
如果你中了MVP的“毒”,觉得你可以在一个月内做出又有价值、又安全的产品,那你一定要小心了。在看了下面的检查单之后,你会发现自己其实忽略了很多至关重要的安全因素。
这个检查单很简单,我也不敢说做了这些你的产品就一定足够安全。我开发安全web程序已经有了超过14年的时间,在这个过程中我也经历了很多让我感到痛苦的事情,这个检查单就是基于这些痛苦的经历而做出来的。我希望你在做web程序的时候,也能仔细考虑一下安全问题。
数据库
- [ ] 在验证用户身份以及敏感数据(例如tokens、电子邮件地址和账单详情)时请对数据进行加密
- [ ] 如果你的数据库支持低成本加密(例如AWS Aurora),请打开这些功能以保护硬盘上的数据。确保所有备份也经过了加密。
- [ ] 当数据库访问用户账户的时候,仅使用最小权限。不要使用数据库的root账户。
- [ ] 使用特别设计的key store来存储和分配秘密数据。不要在程序中使用hard code。
- [ ] 只使用SQL prepared statements,以此来彻底杜绝SQL注入。例如,如果你使用的是NPM,那么就不要使用npm-mysql,而是要使用支持prepared statement的npm-mysqul2。
开发
- [ ] 确保软件的所有组件都经过了漏洞扫描,每一次版本更新都要扫描。这意味着O/S、库和包都要扫描。这个操作应该在CI-CD过程中进行自动化。
- [ ] 开发系统的安全和产品系统的安全一样重要。你应该使用安全、独立的开发系统来进行软件开发。
身份验证
- [ ] 确保所有的密码都使用了正确的crypto进行了加密,例如bcrypt。永远不要自己写crypto,而且要用随机数据对crypto进行正确的初始化。
- [ ] 使用简单但是足够安全的密码规则,鼓励用户创建随机长密码。
- [ ] 在登录和所有服务提供商处使用多重验证。
拒绝服务保护
Web流量
- [ ] 在整个网站上使用TLS,而不仅仅是用在登录表单和响应上。永远不要只在登录表单上使用TLS。
- [ ] Cookies必须只能是httpOnly。
- [ ] 使用不允许unsafe-*后门的CSP,虽然配置起来很麻烦,但是这样做很值得。
- [ ] 在客户端响应上使用X-Frame-Option和X-XSS-Protection header。
- [ ] 使用HSTS响应,强制TLS-only的接入。将所有HTTP请求重定向到服务器的HTTPS上作为备份。
- [ ] 在所有表单上使用CSRF tokens,使用新的SameSite Cookie,它可以一次性针对所有更新的浏览器修复CSRF。
API
- [ ] 确保你的公共API中没有可枚举性资源。
- [ ] 确保用户在使用你的API的时候,他们经过了完整的验证,你要使用正确的验证方式。
验证
- [ ] 在快速用户反馈中使用用户端输入验证,但是永远不要信任它。
- [ ] 在服务器上使用白名单来验证每一条用户的输入。永远不要直接将用户的内容注入到响应中。永远不要在SQL statement中使用用户输入的内容。
云配置
- [ ] 确保所有服务只开启了最少的端口。虽然这样做并不能提供高安全房屋,但是使用非标准端口能让攻击者更麻烦一些。
- [ ] 将后端数据库和服务寄存在私人VPC上,它不会暴露在公共网络上。在配置AWS安全群组时要非常小心,它和VPC都有可能让你在不经意间将服务暴露在公共网络中。
- [ ] 将逻辑服务隔离在单独的VPC中,使用peer VPC来提供服务内部通信。
- [ ] 确保所有服务只从最少的IP地址中接受数据。
- [ ] 严格管理outgoing IP和端口流量,让APT和“botification”最少化。
- [ ]使用AWS IAM,而不要用root证书。
- [ ] 在所用运营和开发者的操作中使用最少的权限接入。
- [ ]定时更换密码和access key。
基础设施
- [ ] 确保你能在不经历downtime的情况下进行升级。确保你能够自动升级软件。
- [ ] 使用Terraform等工具创建所有基础设施,而不是通过云服务控制台。
- [ ] 所有服务都要使用集中化日志。在访问和取回日志的时候,你不应该需要SSH。
- [ ] 除了一次性诊断,其他时候不要使用SSH进入服务器。过多使用SSH意味着你的重要工作没有完成自动化
- [ ] 在AWS服务群组上不要让22端口常开,
- [ ] 使用Intrusion Detection System来最小化APTs。
运营
- [ ] 关闭未在使用中的服务和服务器。只有断了电的服务器才是最安全的。
测试
- [ ] 对设计和部署进行审计。
- [ ] 进行渗透测试,尝试自己黑掉你的网站,你也可以请别人来帮你一起测试。
做好计划
- [ ] 你要准备好应对机制,别人攻击你时你要如何应对。
- [ ] 做一个可行的安全事件计划。有一点你会需要它的。
原文来自:SDK.cn
声明:所有来源为“聚合数据”的内容信息,未经本网许可,不得转载!如对内容有异议或投诉,请与我们联系。邮箱:marketing@think-land.com