学习网络安全:“编程基础:网络安全” 第一部分

作者 : IT 大叔 本文共3016个字,预计阅读时间需要8分钟 发布时间: 2020-09-8

系列介绍

成为开发人员的一部分-实际上是成为人类的一部分-是终身学习。总是有很多东西要学,如果您花时间学习新事物,您将成为更好的开发人员(和更好的人)。本着通过学习成长的精神,我一直在尝试将每个工作日的半小时用于专业发展,专注于我想学习的与我当前工作重点没有直接关系的事情。最初,这段专业发展时间是花在学习有关我在工作中碰到的事情的更多信息。我研究的主题包括打字稿,redux(我已经使用了3年,但我仍然在努力奋斗)以及我们应用程序的会话管理。我很高兴有机会学习更多有关这些主题的机会,但我当时并没有 完全可以确定,每天学习与工作相同的事物如何促进我的整体职业发展。我的经理与我分享了我们部门的能力框架,在回顾了该框架后,我指出了一些我认为我需要学习的领域。

我所了解的空白之一就是网络安全。我知道安全性很重要,尽管许多公司(包括我的公司)都聘请了专门的网络安全工程师作为开发人员,但我知道学习网络安全性的基础知识对于更好地了解我可以在何处运行对我来说至关重要应对安全漏洞(以及何时联系我公司的安全团队与他们一起审查我的选择)。为了帮助我更多地了解这一领域,我决定观看关于LinkedIn学习的一名为“编程基础:网络安全” 的课程。

我从本课程中学到了很多东西,本着分享我的知识并帮助其他人找到他们想要发展的领域的精神,我决定写一系列文章,回顾我在本课程中学到的知识。

什么是网络安全?

Web安全是我们意识到潜在威胁并对其进行适当保护的时候。作为Web开发人员,这意味着检测代码中的潜在漏洞并加以解决。检测这些威胁的过程称为开发威胁模型,它不仅是启动新的Web应用程序,而且还是维护现有应用程序的重要组成部分。

全面的安全性是无法实现的,但是使用威胁模型来发现最重要的漏洞并加以防范很重要。有效的安全性不是一次性的事情,它需要不断地重新评估针对您网站的威胁并防御新的威胁。

一般安全原则

在介绍了网络安全性的概念之后,本课程涵盖了一些常规安全性原理。它描述了每个原理以及如何应用它们。其中一些原则是我以前听说过的,但是其中许多对于我来说是新手,我从本节中学到了很多东西。

最小特权原则

该原则表明,系统的每个用户都应以完成工作所需的最少特权进行操作。在应用最小特权原则的系统中,用户只能访问他们绝对必须能够访问的资源。在这样的系统中,用户也无权编辑其特权级别或授予自己访问不需要访问权限的内容的权限。

此原则也应适用于代码。该代码只能由需要使用它的其他代码访问。私有和公共职能就是一个例子。如果在声明的范围之外不使用某个函数,则该函数应该是私有的(因此不能在该范围之外访问)。仅当需要在声明范围之外重用函数时,才应将该函数公开。

简单更安全

系统越简单,安全性就越高。给系统增加复杂性会增加引入可能导致安全漏洞的错误或错误的可能性。

有关此主题的视频提供了一些建议,以减少应用程序的复杂性,我想特别提及其中两个建议。一种是留下代码注释,特别是有关安全性问题的注释。在做出考虑安全性考虑的代码决定时,重要的是要确保所有其他看到该代码的开发人员都知道安全性问题,并且不要以可能产生新漏洞的方式重构该代码。我想提到的另一个建议是使用编程语言内置的功能,而不是自定义解决方案。作为开发人员,有时候我们觉得我们可以创建一种自定义解决方案,而不是一种语言的内置功能,它可以更好地满足我们的需求。但是这些内置功能往往会得到更好的测试,并且通常已经考虑到安全问题,这意味着在编写自定义代码时,我们将失去内置功能带来的安全性。如果我们选择使用自定义代码而不是内置解决方案,则应该有充分的理由,并且对此自定义代码进行开发和审查的过程中应考虑安全问题。

不信任任何人

信任只能扩展到绝对必要的程度。尽管您可能希望相信所有用户的意图都很好,但这可能并非如此(毕竟,内部威胁是真正的问题,内部威胁是具有合法访问滥用权限的用户所访问的)。为了确保系统的安全性,最好保持一点偏执并对待每个用户,就像他们是潜在的黑客一样。

利用合法用户访问权进行攻击的一个例子是最近的一次黑客攻击,其中涉及多个经过验证的Twitter帐户。受影响的帐户发布了一条消息,承诺如果用户将比特币发送到特定地址,则该邮件将发送回两倍的比特币-但未发送任何返回比特币。攻击者能够访问这些经过验证的帐户,因为他们可以访问Twitter管理员帐户-具有对用户信息的合法访问权限的帐户被用于恶意攻击。即使您知道您的用户将不会发起攻击,您也永远不会知道还有谁可以访问其帐户(稍后将进一步介绍)。

始终期待意外

安全性应该是主动的,而不是被动的。假设您将被黑客入侵(或至少会进行尝试),并弄清楚最有可能发生这种情况的原因,以便您可以防止这种情况的发生。寻找漏洞的一个好地方是在极端情况下,这些情况经常被忽略,并且可能包含意外的安全漏洞。

深度防御

有多种防御措施很重要。这减少了您对任何一种防御的依赖,同时增加了进入系统的难度。

要考虑的三种主要防御措施是物理,技术和管理。物理防御是应用于服务器和硬件的防御,用于防止未经授权的访问,其中包括限制建筑物访问,使用适当的安全协议以及锁定重要的硬件。技术防御措施包括防火墙,防病毒软件,尝试记录的黑客入侵事件以及数据备份,它们为软件和网络提供了防御措施。加密数据,强制用户登录进行多因素身份验证以及将最小特权原则应用于您的代码都是创建技术防护的一部分。行政防御是为实施安全性而制定的策略和过程,可以包括编写正式的安全策略,培训和安全性审查以及渗透测试。

默默无闻的安全性

您提供的信息越少越好。信息很有价值,在需要知道的基础上提供信息有助于确保应用程序的安全。作为网络开发人员,您要注意显示哪些信息-隐藏不需要运行该应用程序的所有文件扩展名或版本信息。黑客可以找到有关您使用的语言和软件的信息越多,他们越容易集中精力进行攻击。讲师给出了一个PHP应用程序的示例,该应用程序创建带有.php扩展名的页面。如果您拥有这样的应用程序,则应配置服务器以在显示页面之前删除该扩展名,以使黑客不知道您正在使用PHP(因此可能不知道将攻击重点放在已知的PHP漏洞上)。

默默无闻的安全本身并不是最好的防御措施,但它可以作为深度防御的一部分很好地发挥作用。

拒绝列表和允许列表

“拒绝列表”和“允许列表”听起来完全像是-禁止或允许的对象或动作的列表。允许列表是维护安全性的更好选择,因为默认情况下它们会假定禁止操作,并且仅在明确列出操作后才允许操作。拒绝列表假定所有内容都允许,除非它在拒绝列表中。在添加应限制的新选项或对象时,如果您使用拒绝列表,则将假定该新内容被允许,而允许列表将假定该内容被禁止。允许列表提供更好的默认安全性,其原因与“不信任任何人”是一个好的策略相同-最佳安全性假定所有意图都是恶意的,并且所有操作都是错误的,除非另有明确说明。

地图暴露点和数据路径

映射数据的移动以及可能的公开位置将有助于提高对数据易受攻击区域的认识,从而帮助您防御那些漏洞。

数据安全目标可以用缩写CIA来概括,CIA代表机密性,完整性和可用性。机密性意味着我们的数据仅对特权用户可用。完整性意味着数据是正确的并且可以信任。可用性意味着数据在需要时可用。

了解网络安全的一般原理对于开发安全应用很重要,但这只是第一步。请继续关注本系列的后续文章,因为我分享了我对过滤输入,调节输出以及一些常见攻击(以及针对它们的防御)所学到的知识。

免责声明:
1. 本站资源转自互联网,源码资源分享仅供交流学习,下载后切勿用于商业用途,否则开发者追究责任与本站无关!
2. 本站使用「署名 4.0 国际」创作协议,可自由转载、引用,但需署名原版权作者且注明文章出处
3. 未登录无法下载,登录使用金币下载所有资源。
IT小站 » 学习网络安全:“编程基础:网络安全” 第一部分

常见问题FAQ

没有金币/金币不足 怎么办?
本站已开通每日签到送金币,每日签到赠送五枚金币,金币可累积。
所有资源普通会员都能下载吗?
本站所有资源普通会员都可以下载,需要消耗金币下载的白金会员资源,通过每日签到,即可获取免费金币,金币可累积使用。

发表评论