软件开发人员应遵循的四项信息安全原则

电子说

1.3w人已加入

描述

信息安全性是一个经常被开发人员误解的主题,因为绝大多数人关注的是安全技术层面,而非涉及人员、金钱、风险和业务优先级等更广泛的主题。因而,我们经常看到因为决策失误使得问题更为复杂,同时也造成资源浪费。

在构建和选择安全解决方案的时候,开发人员必须为业务和组织架构挑选出最为准确的方案。对于初级开发人员而言,如何清楚地知道该在哪些范围内做出安全决策,显得尤其重要。

1. 避免教条主义和绝对主义

最近有一位投稿人在dev.to 文章中分享了关于JSON网页令牌和本地缓存主题的建议,如下。

现如今我所能看到的最大的安全隐患是JWTs(session 数据)的本地缓存。然而许多人并未意识到这些JWTs数据本质上就等同于用户名和密码。如果JWT被黑客复制,他就可以以你的名义向网站发送各种请求,而你却一无所知。要像对待信用卡账号和密码一样来对待你的JWTs,绝不要将其存储在本地。

提出这个建议的文章很好,并且涵盖了很多关于JavaScript本地缓存的重要话题,确实值得一读。但遗憾的是,这种关于JWTs和安全的描述具有误导性,至少缺少开发者所需要理解的细微差别。

使用 JWT 本地存储的立场绝对是:不要这样做!你将JWT存储在哪并不重要,存储在某个'安全'的地方并不能保证安全。关键问题是,你在JWT中存放了什么信息,你用JWT做什么,去获取什么?

如果你的回答不包含任何的个人可识别(标志)信息,或含有最少的个人可标志信息,这样的话你就可以考虑使用JWT去做你想做的。如果关于以上问题的回答是:存储他们所有的信用卡信息,那么你应该考虑用另外的技术来替代JWT。

比如,如果你要实现在线新闻出版物内容收费,本地存储的JWTs将是一个完全可以接受的安全解决方案。你保护的内容是低价值的,没有个人可标志信息,所以黑客对这些内容并不会感兴趣。尽管普通Web用户没有付费时JWT会打断(终止)其访问内容 — 一个简单的安全需求解决方案。

你会注意到这种解决安全问题的方法并不是那么教条和专制。有才华的开发者倾向于成为教条主义和专制主义者,可能是因为他们看到的所有东西都是“不好的”,或者至少不够完美。这有点像当年柏拉图在公元前5世纪看待雅典时期的态度,但像柏拉图一样,这种方法可能会导致解决不好的方案和糟糕的答案。对于试图理解某个话题的人来说,这可能是无益的,特别是如果他们是新手的话。

在处理安全问题以避免教条、专制主义和一刀切等问题时,这是明智的。这与道德绝对“不要杀戮”相当,因为安全涉及更多的细微差别。

2. 没有跟安全性一样的事物

安全的核心有一个极大的讽刺,那就是它并不存在。最近Google Chrome在Twitter上宣布,他们将把所有使用HTTP的网站标记为“不安全”。他们已经在网址栏中将HTTPS网站标记为“安全”。

软件开发

Twitter广告信息及隐私

这很奇怪,因为HTTPS或通过TLS的HTTP是非常有用的安全增强功能,但不能保证其安全性。这是完全可能的:建立一个站点并通过HTTP提供服务,可提供比通过HTTPS服务的站点更安全的方式。

Google此举非常不负责任,因为他们会使普通网络用户处于危险而不自知,以至于对线上行为放松警惕。而这还未涉及HTTPS 连接是如何实现的,请参见灵活的SSLCloudFlare。将这类连接定义成“安全”或者“不安全”会产生误导,更为明智的做法是定义为“私人的”或“公共的”。

绝对的安全并不存在,就算是采用最先进的技术也不能保证。安全性是相对被保护的对象而言的。几千年来,人类建造了各种各样的围墙来保证安全,但皆非固若金汤。

如果不信,那就找个伊朗人问问。凭借以色列人的帮助,美国在2009年入侵了伊朗名为 Natanz 核设施,其中或许还有英国人的帮助。或许你还记得当时Stuxnet 病毒 ,它可是这起事件的罪魁祸首。那次黑客的特别之处在于,Natanz 核设施采用的是空气隙技术,它可能是世界上最安全的设施之一,但也没能阻止美国人将病毒带入该设施从而扰乱伊朗的核计划。

如果你对这个话题以及类似这样的故事感兴趣,我建议你阅读Gordon Corera的书Intercept: The Secret History of Computers and Spies(截取:计算机和间谍秘史)。这是一本很棒的书,将为你介绍安全和黑客之类的话题。

良好的安全性需要构建一个高于你所保护的资产价值的墙。也就是黑客攻击你的系统的代价会比黑客窃取它之后的价值更高。这也意味着你的安全性应该与你所保护的内容相符。例如,不要在服务器上使用网闸(air gap)来保护从网络注册表中收集到的一些电子邮件地址,否则这将非常浪费金钱。

3. 了解潜在的威胁

在建造你的防火墙时,了解你所面临的威胁是很重要的。安全威胁可以分解为四个基本分组:

•  Kiddy Scripters(初级脚本)和自动化威胁:参考大多数WordPress/Joomla hacks。

•  熟练的黑客和黑客组织:匿名,LulzSec

•  有组织犯罪和次要国家成员:黑手党,北朝鲜

•  主要国家成员:美国,中国,俄罗斯,以色列,英国

大多数开发人员很少会处理高于第一级的任何事情。其原因有两方面,你必须做一些重要的有财务价值和/或具有显着的政治价值的事情才能超越这一级。这方面的例子包括敏感的政府工作、公司的财务方面以及重要协作意向。

同样威胁是多样化的,并不一定与黑客攻击数据有关。例如,你的组织可能相比于数据泄露更容易遭受DDOS攻击。作为一名开发人员,重要的是要考虑你的组织可能会如何受到影响,而主要漏洞可能并不总是以财务或PII为重点,这可能事关声誉。通过让你的网站离线以使你的组织遭遇尴尬,这可能会比窃取你的服务器上的PII更具价值。

2014年的Fappening事件是一个组织未能正确理解威胁的经典例子。在这种情况下,Apple未能正确估算他们在iCloud系统上的内容,因此并没有实施可能限制其损害的安全功能。例如,当新设备或奇怪IP连接到帐户时发送电子邮件。Fappening是一个边缘案例,因为之前没有人真正考虑过名人数据的价值,但它确实强调了组织在面临的威胁时可能并不总是理智的。

4. 实现一个适当的解决方案

如果你在没有正确考虑你所面临的威胁的情况下实现通用安全解决方案,则你可能和不使用任何安全措施一样安全不了多少。

作为开发人员,在实现任何安全解决方案之前,你必须认真考虑你所面临的威胁。这样可以实现一个相应的安全措施。适当性并不仅仅是与安全威胁有关,它还涉及到你需要花多少钱。一个贫穷的国家不能建造中国长城,但如果它理解了这个威胁并合理地部署它的资源,它就能够防御之。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分