博客

开启“左移之左”:安全的代码一定是高质量的代码吗?

February 10, 2021
Matias Madou 博士
书桌上摆放着键盘、白色咖啡杯、手机、写有“No Bad Days”字样的标牌以及几盆小绿植

本文部分内容曾刊载于 Dark Reading,现经更新后在此发布。

在与开发人员探讨安全性时,我常挂在嘴边的一句话是:“只有高质量的代码才是安全的代码”。这句话依然适用;在 90 年代,我们或许还能在漏洞百出的软件流向市场后侥幸逃过一劫,但如今这已不再值得冒险。多年来,许多人致力于在开发人员心中培养安全意识,并希望通过这种方式,让他们在评估自身代码时,将安全性与高质量画上等号。

然而,经过反思(以及与同行的一些讨论),我认为这种观点或许过于简化了。完全有可能写出一段确实安全的代码,但其中却体现出新手水平的开发技巧,或者存在其他导致其不够理想的问题。

业界一直在大谈“左移”的概念。在我看来,关键在于“从左侧开始”,即赋能工程团队共同承担安全责任(将其视为质量的一个方面),并让他们有能力在指尖(字面意义上)消除常见漏洞。不过,鉴于当前的困境,我们似乎必须将这一理念进一步推向深入。

高质量的代码从定义上来说必然是安全的,但所有安全的代码却未必是高质量的。从“左侧的左侧”开始,是否就是确保纯粹安全编码标准的秘诀?

“低质量”的安全代码长什么样?

让我们用放大镜仔细看看这段代码片段:

如果我们从安全角度分析这段代码,它确实是安全的,攻击者无法将其作为利用 SQL 注入漏洞的切入点。

但它算得上高质量代码吗?很遗憾,并不算。如果将参数从 int(整数) 简单更改为 String(字符串) 类型,用户就可以输入任意内容来操纵查询,而数字类型则不会出现这种情况。这种改动——或者从别处随意复制粘贴 SQL 字符串——会立即创造出可能引发 SQL 注入漏洞的环境,并带来所有相关的风险:

Java method getFeedbackById that retrieves feedback from database and returns a FeedbackEntity object.

这里的安全措施范围非常有限,而更严谨(或更有经验)的开发人员可能会采取不同的方法,并考虑到低效参数结构带来的影响。发布这样的代码不仅是不专业的做法,还会为开发团队中的其他人树立坏榜样。

软件界的“三项全能”:形式、功能与堡垒般的防御?

娱乐界的“三项全能”是指那些在表演、舞蹈和歌唱方面都具备极高造诣的人。他们是每次试镜中既让人敬畏又让人羡慕的对象,是竞争激烈的领域中凤毛麟角的奇才。每个行业都有其顶尖、卓越的产品和服务代表,软件行业也不例外。

如果我们考虑应用程序中三个难以兼顾(高质量)的关键要素,那可能是功能性/优雅性、坚不可摧的安全性,以及在考虑交付速度要求时的成本效益。最后这一项无疑是决定其他两项应用效果的关键因素,它也可能成为导致整体质量随时间推移而下滑的催化剂。

然而,所有的软件都需要像休·杰克曼那样表现出色吗?还是说像尼古拉斯·凯奇那样也行得通?换句话说:如果你的团队能拥有“金刚狼”,那就全力以赴做到最好吧。

马丁·福勒曾提出过一个问题:高质量值得付出代价吗? 他在软件开发领域得出的结论是,这不仅“值得”,而且从长远来看成本更低。大多数用户不会去深究代码是否混乱,也不会关心安全性是否与其它方面同等重要。然而,开发人员却会浪费宝贵的时间去重构草率的代码以添加新功能,或者在项目的庞大代码库中苦苦搜寻以理解其逻辑,最糟糕的情况是:修复从应用安全团队退回的漏洞,从而导致生产延期。现在花时间编写既安全又高质量的代码,可以避免未来的许多烦恼,更不用说重构糟糕代码所带来的成本了。

技术娴熟且具备安全意识的开发人员在交付功能时,既能保持创造性的问题解决思路,又能考虑到消除工程师在各自环节中可控的常见安全隐患。孤立地谈安全代码效果并不理想,这就是为什么“从左侧的左侧开始”这一理念有助于支持一种将安全视为开发人员第二天性的文化,将其融入到他们以更低风险交付出色功能的能力之中。

从“左侧的左侧”开始,对于安全的用户体验至关重要。

长期以来,安全性一直是软件用户体验中的一个考量因素,但显然成效参差不齐。在过去的一年中,安全配置错误导致了 21% 的云数据泄露事件,诸如以明文形式存储密码这类业余错误,给受影响的公司造成了生产力、收入和客户信任方面的严重损失。

此外,用户在保护自身数据方面往往也是自己最大的敌人。太多人至今仍在使用“password”作为密码,或者在多个敏感账户中使用相同的密码组合。

我还没见过哪个开发者在被要求开发登录界面时会欢呼雀跃,这并不奇怪:设计一个既稳健、实用,又能让用户以最少干扰、直观地完成操作的安全流程,本身就是一种微妙的平衡。

如果设置了过多复杂的步骤和限制,用户可能会直接放弃使用(这对新应用来说是灾难);如果流程过于混乱,客服团队可能会因为处理用户无法登录的咨询而头痛不已。但如果设置得过于简单,又无法达到安全防护的目的。

成功的安全用户体验需要将严密的安全机制融入合理的流程中,并以不影响软件核心吸引力的方式呈现。你当然可以实现编码安全登录功能的目标,加入各种复杂的密码要求、验证码、层层关卡和重重阻碍,但如果这让用户感到厌烦,那它就完全偏离了初衷。

为卓越的软件奠定基础。

作为一名开发者,我深知我们绝大多数人都以自己的工作为荣,并希望做到最好。时间紧迫、目标突变或紧急修复等棘手问题可能会打乱节奏并导致失误,但残酷的现实是,许多软件工程师并没有获得成功的必要条件。

“左移之左”(left of left)是一个以开发者为先的理念,要求企业认真对待并提升工程团队的能力。具备安全意识的开发者价值连城,通过培训、提供合适的工具以及资深开发者的指导,能够营造出一种以安全为核心的编码环境,从而以所需的精准度和专注力将软件提升到新的高度。

准备好点燃你的安全编码热情了吗?迎接挑战吧。

‍

标语

在 AI 驱动的开发成果发布前实现有效治理

评估 AI 辅助风险,在提交代码时强制执行安全编码策略,并加速整个软件开发生命周期的安全交付。

预约演示
资源库

探索更多博客

获取有关安全编码、人工智能治理和软件风险管理的专家内容。

浏览全部
案例研究
筛选标签
这是 div 块中的一段文本。

Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

了解更多
案例研究
筛选标签
这是 div 块中的一段文本。

Security as culture: How Blue Prism cultivates world-class secure developers

Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed

了解更多
案例研究
筛选标签
这是 div 块中的一段文本。

统一的安全文化:Sage 如何打造其安全倡导者项目

了解 Sage 如何通过灵活且以关系为导向的方法提升安全性,成功培养了 200 多名安全倡导者,并实现了显著的风险降低。

了解更多
博客
筛选标签
这是 div 块中的一段文本。

2026年网络安全意识月:理解人工智能安全对企业防御至关重要

目前,大多数顶级人工智能公司已公开呼吁全球放缓人工智能的发展速度,以便安全防护措施能够跟上步伐。然而事实是,严重的安全问题已经显现。随着人工智能实施带来的经济成本和风险不断累积,无数安全领导者和高管团队正处于紧迫的境地。

了解更多
博客
筛选标签
这是 div 块中的一段文本。

赋能要素 8:打造项目品牌

成功的安全编码项目不仅需要优质的内容。赋能要素 8 展示了如何通过品牌化将参与过程转变为一种令人向往、以地位为驱动的体验。

了解更多
博客
筛选标签
这是 div 块中的一段文本。

每一位员工现在都处于 AI 网络安全的最前线

企业技术格局正以一种鲜有人预料到的速度发生剧变,直到为时已晚。我们已正式跨越了从人工编写代码和基础辅助编程,进入“智能体开发生命周期”(ADLC)的时代。虽然自主 AI 智能体有望在多个职能领域实现前所未有的效率,但它们也带来了全新的安全和监管风险。

了解更多

在产品发布前确保 AI 驱动的开发安全

洞察开发风险,执行安全策略,并在整个软件开发生命周期中预防漏洞。

预约演示
未找到相关项目。