在线学习非常普遍,尤其是在自认为是开发者的人群中。如果查看Stack Overflow 年度开发者调查(该调查会收到数万份回复),就会发现相当一部分开发者没有接受过正规培训:

- 在全球目前从事专业开发工作的开发者中,76.5%的受访者表示自己拥有学士或更高学位,例如硕士学位或同等学历。
- 20.9%的受访者表示,他们的专业是其他领域,例如商科、社会科学、自然科学、非计算机类工程或艺术。
- 在目前的专业开发人员中,32%表示,正规教育对其职业成功不太重要或完全不重要。鉴于总体而言,90%的开发人员认为自己至少在一定程度上是自学成才的,这一结果并不完全出人意料:正规学位只是其教育经历的一部分,而大量日常实际工作取决于所在公司对具体技术栈的选择。
请注意调查结果中突出显示的部分。关于这一现象背后的原因,我甚至可以写一篇论文。不过简单来说,我攻读学士学位时使用的是Pascal、C++和LISP。我的第一份正式开发工作要求使用C/C++,所以这方面没有问题。但后来,我又需要学习Java和SQL。我并没有为此重返学校,而是通过书籍、帮助文件以及能找到的各种文档自学。无论是否接受过正规教育,自学都是常态,因为技术不断变化,而专业人士没有时间仅仅为了学习一种新语言或框架就重返学校。
我想,对我们任何人来说,这种情况都很常见。我们不会为了学习新的CLI或API而重返校园,也不会仅仅为了学习Python或Node.js而攻读新的学位。我们会求助于书籍、互联网内容和社区,并且高度依赖“示例代码”。

我仍然依靠博客和文档来学习,这些资料不仅来自我们自己的工程师和架构师,也来自其他人。因为现在攻读博士学位并不能真正帮助我*深入了解Express framework或JQuery。
因此,网络工程师和运维人员(作为DevOps第二波浪潮的首批参与者,以下统称为NetOps)也很可能会借助同类资料,掌握熟练使用所需工具和技术的技能。这些工具和技术就是脚本语言和API,特此向刚开始关注这一话题的读者说明。在熟悉相关语言和系统的过程中,他们无疑也会大量复制粘贴,并开始实现生产流水线自动化。
这就说到了我今天写这篇文章的原因:示例代码。
示例代码有很多,而且质量也不错。请不要误以为我不领情或不重视示例代码。对于任何尝试学习新语言和API的人来说,它都是非常宝贵的资源。我真正想抱怨的是,示例代码与安全性之间存在脱节,这个问题需要解决。因为在教新手编程时,我们至少也应该培养他们的安全意识,而不是公然忽视安全问题。
之所以这么说,是因为应用安全绝非可有可无,再强调一遍,绝非如此。我可以列出一项又一项统计数据,但希望说到这里,大家已经认同这一点。应用安全绝非可有可无。我们必须不断强化这一观念,直到它被视为开发工作不可或缺的一部分。需要重视安全的不只是应用,还包括DevOps和NetOps人员用于推动自动化的脚本和系统。
下面这个例子正是我担忧的根源。
这段代码本身很漂亮。真的。格式规范,间距合理,可读性强。我很喜欢这段代码。除了其中完全违反安全规则零的部分。

绝不可相信用户输入。任何时候都不行。
令人失望的是,文中甚至完全没有提及需要对输入进行清理,无论是代码注释还是文章正文都只字未提。代码直接将“username”传递给另一个函数,丝毫没有考虑其中可能包含恶意内容。
但Lori,很明显,这段代码只是为了演示某项功能的实现,并非设计用于实际生产环境,因此不存在风险。
这不是重点。重点是,如果我们继续教大家编程,至少也应该尝试教他们以安全的方式编程。我们应该像提醒刚接触C/C++的开发者一样,经常提及这一点:如果不先为指针分配内存就访问它,程序就会崩溃。
我可以写一篇又一篇博客,列举大量例子,说明人们如何只在口头上重视安全和软件开发生命周期(SDLC),但一到真正教授编程时,安全就突然被晾在角落,周围仿佛笼罩着一个SEP(“这是别人的问题”)力场。
这进一步说明了为什么Web应用防火墙是任何应用安全策略中的关键组成部分。组织需要在用户输入与不加辨别地将其视为合法内容的应用之间设置一道防火墙,以免成为层出不穷的应用安全漏洞的又一个受害者。
因为尽管我们总爱谈论如何保障代码安全,但真正向他人传授相关知识时,却没有以身作则。我们需要更加重视这种对安全的忽视,即使是示例代码也不例外,因为开发人员(以及越来越多的网络运维人员)正是从中学习。不过,在我们真正做到这一点之前,仍需要WAF等安全解决方案来弥补不安全代码留下的缺口。
* 显然,英语也不例外。得了吧,我是故意那么说的,因为有时候故意说错也挺有意思。
关于作者

Lori MacVittie是F5首席技术官办公室的杰出工程师兼首席技术布道师,在应用交付、自动化战略和基础设施领域拥有深厚的专业知识。无论是为AI智能体定义防护机制、剖析脆弱的多云架构,还是探索可扩展系统的极限,她都善于化繁为简。她在应用开发、IT架构以及网络和系统运维领域拥有30多年的行业经验。加入F5之前,她曾担任技术编辑,并因出色表现获得奖项。 MacVittie拥有计算机科学硕士学位,著述颇丰,出版作品涵盖安全、云和企业架构领域。她还热衷于桌面游戏和电子游戏,并且对奶酪有着毫不掩饰的鲜明见解。
Lori Mac Vittie 的更多博客文章相关博客文章
Thingbot正转变为攻击平台
Lori MacVittie重点介绍了F5 Labs对2018年1月至6月全球物联网设备攻击的研究,并指出了其中令人警醒的影响。物联网设备不仅持续遭到利用,还被转变为攻击平台,这意味着攻击者可以更充分地利用这个必然增长的市场。
借助F5全新Quick Start,在AWS上快速开展业务
在AWS re:Invent开幕前,我们很高兴与大家分享F5与AWS之间全新的Quick Start集成。F5的Tom Atkins将介绍该服务如何启动、配置和运行在AWS上部署工作负载所需的计算、网络、存储及其他AWS服务。