安全无小事:前端开发必备的Web安全检查清单

二叶草 2020年2月10日14:39:35IT专区评论阅读模式

在各种各样云盛行的今日,想在云上开发设计出兼顾安全性和鲁棒性的Web程序运行并非非常容易的事。当你感觉非常容易,那要不你也是一种更高級的微生物,要不你痛楚的时日还要后边。当你感觉自身能够在一个月内开发设计出一款具有价值又具备安全性的产品,请先对照着下面的清单看看,看看你是不是忽视了这些关键的安全问题。

这个清单其实很简单,而且肯定不能覆盖所有问题。我在Web应用安全领域已经工作了14年,这其中包含了我在痛苦中学到的重要经验,希望您在创建Web应用程序时可以参考。

数据库

  • 用户身份认证的数据和敏感数据(如token、email或支付信息)请加密(这可以把查询限制为完全匹配查找)。
  • 如果您的数据库支持低成本加密(如AWS Aurora),请打开这些功能以保护磁盘上的数据。还要确保所有备份也都经过加密。
  • 数据库访问的账户请使用最小权限,而不要用数据库root账户。
  • 用专门设计的Key store来存储和分发机密数据和内容,不要硬编码写到应用里。
  • 只使用SQL预处理语句(prepared statements)严防SQL注入。例如:如果要用NPM,不要用npm-mysql,而要用支持预处理语句的npm-mysql2。
开发

  • 对每个待发布的版本,要确保所有组件都经过了漏洞扫描,这包括O/S、库和包。这个步骤应该在持续集成/持续交付流程中自动完成。
  • 保证开发系统的安全,这和产品系统安全同样重要。应该用安全、独立的开发系统来开发软件。
认证

  • 确保所有的密码都使用了正确的加密方式(如bcrypt)。永远不要自己实现crypto,而且要用随机数据对crypto做正确的初始化。
  • 在实现登录、忘记密码、重置密码等功能时,采用前人验证过的最佳实现或组件,不要重复造轮子。
  • 遵循简单且适宜的密码规则,鼓励用户使用较长的随机密码。
  • 你们的所有服务,登录时要使用多重验证。
 拒绝服务攻击(DOS)防护
  • 确保针对API的DOS攻击不会影响你的网站。至少应该在登录和token生成之类较慢的API路径中设置频率限制。
  • 用户提交的数据和请求,要针对规模和结构这两点设置合理的限制。
  • 通过CloudFlare等全局缓存代理服务来规避DDOS。当网站遭受DDOS攻击时可以打开这个服务用作DNS查询。
Web流量

  • 对整个网站使用TLS,而不要只用在登录表单和响应上。永远不要只在登录表单上使用TLS。
  • Cookies必须设置成httpOnly。
  • 在客户端响应头使用X-Frame-Option和X-XSS-Protection。
  • 使用HSTS响应强制TLS-only的接入。将所有HTTP请求重定向到HTTPS作为替代方案。
  • 在所有表单上使用CSRF令牌,使用新的SameSite Cookie,它可以彻底修复针对所有较新的浏览器上的CSRF问题。
API

  • 确保你的公共API中没有可枚举资源。
  • 确保用户在使用API时已经经过了完全认证和授权。
  • 在API中使用随机检查来检测可能具有潜在攻击的异常请求。
校验与编码

  • 为了实现快速用户响应,输入校验可以在客户端做,但不要太信任,始终要对用户多输入进行校验和编码。
  • 在服务器上用白名单校验所有用户输入。不要直接将用户内容添加到响应中。千万不要在SQL语句中使用用户输入的内容数据。
云端配置

  • 所有的服务开放尽可能少的端口。把默认端口替换成非标准的端口,可以增加攻击的难度。
  • 后端数据库和服务应托管在私有VPC上(虚拟私有云),确保这些VPC在任何公网中都不可见。当配置AWS的安全策略和对等VPC时要非常小心,因为一不注意就会导致其服务暴露在公网。
  • 隔离的逻辑服务应该各自放在不同的单独VPC上,用对等VPC内置的通讯服务提供服务内通信。
  • 确保所有服务接收的数据都来自于尽可能小范围的IP地址集。
  • 限制出站IP和端口流量,以尽量减少APT攻击带来的损失。
  • 使用AWS IAM(访问管理)角色而不是使用root。
  • 所有运维和开发人员都应该使用最小的访问权限。
  • 定期更换密码和访问密钥。
基础设施

  • 保证能够在无需停机的情况下进行更新升级,同时可以自动更新软件。
  • 使用Terraform等工具来创建所有的基础设施,而不是通过云端控制台。
  • 所有的服务要用集中的日志记录。不要通过SSH来访问和读取日志。
  • 除了一次性诊断,其它时候不要使用SSH进入服务器。过多使用SSH就意味着你的自动化程度不够,还有重要任务不能自动化。
  • 不要打开AWS服务组上的22端口。如果必须要使用SSH的话,那就用公钥身份来验证,不要用密码。
  • 使用入侵检测系统来最大限度地减少APT。
操作/运维

  • 关闭未使用的服务和服务器。最安全的服务器就是断电的那一台。
测试

  • 对设计和实现进行审查。
  • 进行渗透测试 —— 也就是尝试黑掉自己的程序,同时也请其他人帮助一起做测试。
最后,制定计划

  • 准备好应对机制,假设遭到攻击时你要如何应对。
  • 做一个具备可操作性的安全事件计划,没准有一天你会需要它。

本文来源于:安全无小事:前端开发必备的Web安全检查清单-变化吧门户
特别声明:以上文章内容仅代表作者本人观点,不代表变化吧门户观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与变化吧联系。

  • 赞助本站
  • 微信扫一扫
  • weinxin
  • 加入Q群
  • QQ扫一扫
  • weinxin
二叶草

发表评论