在线学习很重要。 特别是对于那些自我认同为开发人员的人。 如果你看一下Stack Overflow 的年度开发者调查(他们收到了数以万计的回复),你会发现很大一部分开发人员都没有接受过正规培训:
请注意调查结果中突出显示的部分。 我可以写一篇论文来解释为什么这是真的,但我只想说,当我在攻读学士学位时,我用 Pascal、C++ 和 LISP 编写过程序。 我的第一份真正的开发工作需要 C/C++,所以我很擅长这方面工作。 但后来我被要求学习 Java。 和 SQL。 我没有回学校做那事。 我求助于书籍、帮助文件以及我能找到的任何其他文档。 无论您是否受过正规教育,自学都是常态,因为技术在不断变化,专业人士没有时间重返学校学习一门新的语言或框架。
我想,对于我们任何人来说,这种情况都很常见。 我们不会为了学习新的 CLI 或 API 而重回学校。我们也不会为了学习 Python 或 Node.js 而去攻读新学位。 我们求助于书籍和互联网上的内容、社区,并且严重依赖“示例代码”。
我仍然依赖博客和文档,不仅来自我们自己的工程师和建筑师,也来自其他人。 因为现在报名攻读博士学位并不能真正帮助我了解Express 框架或JQuery的来龙去脉。
因此,毫不奇怪,网络工程师和运营人员(作为第二波 DevOps 的第一部分,今后将被称为 NetOps)也可能求助于相同类型的材料来获得熟练掌握所需工具和技术所需的技能。 对于那些刚刚开始关注的人来说,这就是脚本语言和 API。 当他们熟悉了语言和开始自动化生产流程的系统后,他们无疑也会全力以赴地复制和粘贴。
这就是我今天写作的原因。 示例代码。
有很多。 这是很好的代码,不要以为我不领情或不重视示例代码。 对于任何试图学习新语言和 API 的人来说,它都是非常宝贵的资源。 我要抱怨的是示例代码和安全性之间存在脱节,需要加以解决。 因为当我们在教新手编码时,我们也应该至少向他们灌输安全意识,而不是公然忽视它。
我这样说是因为应用程序安全性不是——重复一遍不是——可选的。 我可以抛出一个又一个统计数据,但我希望此时我是在向信徒布道。 应用程序安全性不是可选的,重要的是宣传这种态度,直到它被视为开发不可或缺的一部分。 请注意,这不仅仅是应用程序,还有通过 DevOps 和 NetOps 实现自动化的脚本和系统。
我以这个例子来说明我焦虑的根源。
代码本身很漂亮。 真的。 格式良好,间距适宜。 可读。 我喜欢这个代码。 除了完全违反零安全规则的部分。
我很失望,甚至没有人点头表示需要净化输入。 既不在评论中,也不在文章正文中。 代码只是将“用户名”传递给另一个函数,根本不担心它可能包含恶意内容。
但是 Lori,显然这段代码只是为了说明某些东西的实现,而这些东西并非设计用于实际生产。 这不是一个风险。
这不是重点。 重点是,如果我们继续教人们编码,我们至少应该尝试教他们如何安全地编码。 经常提到这一点,就像有人向 C/C++ 新手开发人员指出的那样,如果在访问指针之前没有为其分配内存,它就会崩溃。
我可以在一篇又一篇的博客中举例说明安全性和 SDLC 是如何只被当作口头上的东西,但当涉及到实际问题和教人们编码时,它突然被孤立在角落里,周围都是 SEP(别人的问题)领域。
这只是Web应用防火墙成为任何应用程序安全策略的关键组成部分的另一个原因。 组织需要在用户输入和盲目接受其为合法的应用程序之间建立一个防火墙,以避免成为众多应用程序安全漏洞的最新受害者。
因为尽管我们喜欢谈论保护代码安全,但当我们真正教给别人时,我们却没有做到。 我们需要更多地意识到这种对安全性的缺乏关注——即使是在示例代码中,因为这是开发人员(以及越来越多的 NetOps)学习的地方——但在我们开始这样做之前,我们需要像 WAF 这样的安全解决方案来填补不安全代码留下的空白。
* 或者显然是英语。 哦,拜托,我是故意这么做的。 因为有时说错也很有趣。