Segurança da Informação
OWASP
Aplicações Web
LGPD
Desenvolvimento Seguro

Web 应用程序的安全性:任何人都不能忽视的基础知识

安全性不是在最后添加的层,而是从第一行代码开始的架构决策。

实际上,每个 Web 应用程序都是通向世界的一扇大门。您可以撬开锁或将钥匙留在地毯下。大多数团队在没有意识到的情况下选择了第二种选择,不是因为无能,而是因为从一开始就很少将安全性视为一项要求。

我向任何团队提出的问题都很简单:如果攻击者今天决定攻击您,需要多长时间?诚实的回答往往会让人感到不舒服。问题几乎从来都不是缺乏技术。这是缺乏基础。

本文就是关于这些基础知识的。不是关于流行的工具,而是关于支持值得信任的 Web 应用程序的原则。

为什么安全已成为一个业务问题

曾经有一段时间,安全问题仅限于基础设施团队。如今,这是一个首席执行官、董事会和声誉问题。

数据泄露不仅仅是一个错误。这是一个头条新闻,这是一个罚款,这是一个失去的客户。在巴西,[LGPD0] 给那些粗心对待个人数据的人带来了具体后果。但即使没有监管,事故的成本也始终很高,而且只会变得更加明显。

关键是安全不再是一个技术细节,而成为一个业务变量。那些主导产品或技术的人需要了解这一点才能决定投资方向。

论文:安全是架构,而不是清漆

我的立场很简单。安全性不是您在产品准备就绪后添加的一层。它是一种从你一开始就做出的决定中产生的属性。

将安全性视为最终任务、发布前的审查、仓促的笔测试的团队只是购买了保护的假象。笔测试发现症状。该架构定义了疾病是否存在。

当安全性成为根本时,它就体现在如何对数据进行建模、如何对用户进行身份验证以及如何信任(或不信任)输入。当它是清漆时,它会出现在一份没有人读的报告中。

真正重要的基本原理

我会务实的。有几十个可能的主题,但一些基本原理可以解决大多数实际问题。

永远不要相信用户输入

大多数经典漏洞,SQL 注入、跨站脚本、参数操纵,都源于同一个错误:信任来自外部的数据。

规则很简单且不容谈判:除非另有证明,否则所有进入都是敌对的。始终在服务器上进行验证。浏览器中的验证是用户体验,而不是安全性,这是很容易规避的。

在数据库中使用参数化查询。根据上下文转义输出。将文件上传视为潜在的恶意代码。这些预防措施看似显而易见,但它们仍然是新闻事件发生的原因。

身份验证和授权是不同的事情

身份验证回答“你是谁”。授权回答“你能做什么”。将两者混淆会导致灾难。

我看到的最常见的错误:应用程序检查用户是否已登录,但不检查他们是否有权访问该特定资源。结果就出现了一个经典问题:用户 A 只需更改 URL 中的数字就可以看到用户 B 的数据。

需要在服务器上检查每个敏感请求的授权,而不是根据界面显示的内容进行假设。隐藏按钮并不能保护任何东西。

将秘密作为秘密进行管理

密码、API 密钥、访问令牌。这些数据不属于源代码,不属于存储库,并且绝对不属于版本化配置文件。

用户密码必须使用为此目的设计的哈希算法来存储,而不是使用可逆加密,更不用说以纯文本形式存储。使用综合图书馆。自制加密是造成问题的最快方法之一,而您在发现问题时却为时已晚。

传输中的加密不是可选的

所有流量都必须使用 HTTPS。今天没有合理的理由不这样做。未经[加密2]传输的数据可能会被拦截,其中包括凭证。

但请注意:HTTPS 保护的是路径,而不是目的地。应用程序可以在浏览器中显示绿色锁,但仍以纯文本形式存储密码。传输中的加密和静态的加密是不同的层,而且都很重要。

OWASP 教给我们什么

当有人问我从哪里开始时,我的答案几乎总是相同的:从 OWASP 开始。

OWASP Top 10 是 Web 应用程序中最严重的漏洞列表,由社区维护并定期更新。这不是一个官僚标准,而是一张实际造成伤害的威胁地图。

它的价值不在于记住列表,而在于将其用作团队内的通用语言。当每个人都了解什么是损坏的访问控制或失败的安全配置时,技术对话就会变得更加客观,决策也会变得更加明智。

我建议将前 10 项作为流程的一部分:进行轻松但一致的审查,询问“我们是否面临这些风险?”在每次相关交付之前。

破坏安全的文化错误

安全最困难的部分不是技术。这是文化。

第一个错误是将安全视为一个人或一个孤立团队的责任。安全性是那些编写代码的人、设计产品的人以及确定待办事项优先级的人的责任。当它成为某人的工作时,它就不再是任何人的工作了。

第二个错误是安全问题:没有人遵循的大量政策、存在于文档中但不是日常的流程。真正的安全是谨慎且可操作的,而不是抽屉里的手册。

第三,也许是最危险的,是“这不会发生在我身上”的错误感觉。小型应用程序一直受到攻击,通常是由不选择目标的自动化攻击造成的。小并不是保护。

安全是一种优势,而不是成本

有一个更好的方法来看待这一切。出色的安全不仅仅是防御,更是一种差异。

在处理敏感数据的部门,例如医疗保健、金融和公共部门,信任就是货币。与忽视数据主题的竞争对手相比,对数据表现出关注的产品具有优势。对于公共管理者来说,这一点更为重要:公民数据不是组织的资产,而是责任。

投资安全基础并不会阻止创新。相反,它为您提供了坚实的基础,您可以在此基础上快速构建,而不必担心一切都会崩溃。

安全不是你有时间时所做的事情。它决定了您正在构建的产品是否值得存在。

如果您的组织正在开发 Web 应用程序,并且安全性仍然是一个留到最后的主题,那么值得重新审视这个优先事项。我的博客上还有其他关于 [LGPD3´、密码学和安全架构的文章,并且我始终愿意与认真对待该主题的任何人交换想法。

另请阅读

  • [应用程序中的漏洞:为什么它们持续存在以及如何领导防御4
  • 【创建应用时:初学者不能忽视的安全5
  • [Web 应用程序的安全性:为初学者解释的架构6
  • [移动应用程序的安全性:保护数据和用户的基础7
  • 【内容推荐:系统扩容时的安全与隐私8
  • [API安全:不让门敞开的基本步骤9