在之前的文章中,我们一起解读了2021年数据成本报告。根据 IBM 和 Ponemon Institute 2021年的报告,全球平均数据泄露成本约为424万美元。为了降低数据泄露造成的成本,企业可以通过多种方式积极主动地保护数据安全。而安全编码(Secure Coding)本身不需要任何成本,这是企业能够且应当采用的一种安全措施。

通过提高对不良编码习惯(Bad Coding Habits)的认知,企业可以开始主动关注代码的完整性。

什么是安全编码?

安全编码通过对编写代码过程的严格把控,来主动应对潜在的安全漏洞。然而安全编码不仅仅只是编写好代码,而是在安全的环境中,在安全的平台上进行开发。当然在云计算时代,平台和软件等服务都需要正确配置。

为什么安全编码很重要?

不难理解,不安全的编码会造成安全风险,尤其是数据泄露风险。当企业面临重大安全漏洞时,他们并不会总是披露安全漏洞的性质。这是因为即使企业知道是什么原因造成的,并且及时修复了漏洞,但是关于这些漏洞修复信息对于潜在的恶意攻击者来说仍然具有很高的参考价值。

数据泄露可能是最可怕且代价最大的安全漏洞。在 IBM 和 Ponemon Institute 的研究中,44% 的泄露事件中包含了客户个人身份信息(Personal Identifiable Information, PII)。每条客户 PII 记录的平均成本高达 180 美元。因此企业需要加强安全协议,而安全编码是这些安全协议的核心。换句话来说,如果没有安全编码,所有安全协议都无法保护企业最有价值的资产。

5大不良编码习惯

本文我们将着重讲解开发人员在从业早期的一些不良编码习惯行为,这些行为如果不进行及时纠正和控制,可能会造成严重的安全为题。因此,企业需要确保所有开发人员对这些不良coding行为和习惯有明确的认知,并学习如何避免这些行为出现在开发过程中。

1. 未检查复制的代码

有时开发需要一些核心功能,而正好有其他的开发人员已经对此进行多次编码,这时复制代码是一个省时省力的举措。

了解你所复制的代码,就好比查看同事的代码一样,请确保在复制代码前已经通读并充分理解。永远不要盲目相信互联网上的某个人公开的代码,切记检查和核实。

尽可能使用库(library)。在某种程度上,使用库要比复制代码更保险一些。当然开发人员也需要根据自身需求来决定。如果需要一些字符串处理功能,那么使用对应的处理字符串的库可能对项目来说是一个很好的补充。而如果只需要一个函数,那么简单的复制可能比使用整个库更加便捷。

2. 已弃用、废弃和可疑的库

在已弃用、废弃和可疑的库中有很多不良代码。有时开源代码在未经社区适当审查的情况下被打包到库中,而这可能导致代码中存在安全漏洞。这些安全漏洞没有人愿意去主动识别,更不用说去修复了。

因此,使用库时一定要确保这些库时受信任的企业或大量开发人员广泛使用和监控的库,这些库能够得到维护和定期更新。假设这个库十年没有更新,那么开发人员首先要考虑是否继续使用该库,或者在将其合并到项目之前先查看整个代码库。切忌盲目相信和使用。

3. 不受限制的存储库访问

在当今开发环境中,大家倾向于相信开发人员可以不受限制访问源代码的存储库,然而这存在重大安全漏洞。因为开发人员并不需要访问所有的内容,他们只需要访问正在处理的代码区域,有时甚至都不需要编写权限。

虽然访问受限会降低开发速度,但却能帮助企业保持代码的互不依赖性和模块化。如果开发人员只能对他们正在开发的模块进行更改,被迫和项目的其他部分保持分离,即使不考虑安全性,这也是一件对企业有利的事。

无法访问整个源代码的员工,无论是出于恶意或无意,对企业造成的损害是非常有限的,因此能提高企业系统和代码的安全性。当然即便在受限访问的策略之下,IT 部门也必须在开发人员离开企业后及时撤销起对源代码存储库的访问权限。

4. 硬编码密钥(Hardcoded Secret)

Secret 是提供应用程序到应用程序(application-to-application)访问的在线凭据。它可以是 API 密钥、云凭据、加密密钥、数据库访问详细信息等。欠缺经验的开发人员会在代码中使用纯文本密钥进行初始开发,这是一种常见的做法。然而随着开发的进行,这些 secret 会被忘记并留在那里,从而导致泄露风险。托管在 GitHub 等公共云服务上的源代码很容易被恶意攻击者利用。因此,开发人员在代码上传到云之前需要先扫描其中是否包含遗漏的 secret。

即使源代码从未公开,大多数编译后的代码也可以进行逆向工程。代码混淆(Source code obfuscation)可以帮助增加逆向工程编译代码的难度。不过,正确保管密钥才是防止泄露的最好方式哦!

5. 错误提示中暴露信息

通过参考详细的错误提示来调试代码是开发人员的日常。但这些错误提示可能为恶意攻击者的提供参考信息。因此,错误提示需要对用户有所帮助,但同时也要注意不能提供任何有关代码如何运行的任何信息!隐藏有关代码结构、数据结构和与其他软件连接的信息。与此同时,请确保及时发现和处理异常。

总 结

通过了解这些不良编码习惯以及如何养成更好的习惯,企业就能够开发更安全的代码。有了对不当的编码行为的认知,企业可以开始试着注意开发人员目前的开发习惯,并记录下来一些可能导致安全问题的行为,与开发团队一起讨论并寻找解决方案。如果开发团队的成员都有着良好的开发习惯,那么企业的代码安全将会上升到一个新的高度。

​五大不良 coding 习惯,你占了几样?的更多相关文章

  1. 网上搜集了点资料,学web的人互相分享共同进步吧(php编码的好习惯必须养成)

    网上搜集了点资料,学web的人互相分享共同进步吧 一.优秀的代码应该是什么样的? 优秀的PHP代码应该是结构化的.大段的代码应该被分割整理成一个个函数或方法,而那些不起眼的小段代码则应该加上注释,以便 ...

  2. Tkinter--Text文本框样例

    #-*- coding:utf-8 -*- """ Text 文本框样例 实现功能有:Ctrl+a全选文本, 竖向滚动条,横向滚动条(不自动换行) 自动缩放 有谁知道全选 ...

  3. 关于cf[转]

    还不怎么熟悉cf呢.. 你应当知道的关于Codeforces的事情 Codeforces简称: cf(所以谈论cf的时候经常被误会成TX的那款游戏).网址: codeforces.com 这是一个俄国 ...

  4. 大数据开发实战:Hive优化实战1-数据倾斜及join无关的优化

    Hive SQL的各种优化方法基本 都和数据倾斜密切相关. Hive的优化分为join相关的优化和join无关的优化,从项目的实际来说,join相关的优化占了Hive优化的大部分内容,而join相关的 ...

  5. codeforces之始

    很早就听说acmer界的CF嘞!还记得刚开始听到神犇们在讨论CF的时候我还以为是网游CF(穿越火线)呢... 今年刚开学的时候就打算开始打cf的,由于一些事情耽搁了.之后又要准备省赛所以就一直拖到现在 ...

  6. Android面试题集

    前几天整理了Java面试题集合,今天再来整理下Android相关的面试题集合.假设你希望能得到最新的消息,能够关注https://github.com/closedevice/interview-ab ...

  7. 作为程序员,你关注哪些国外 IT 网站?

    1.在线编程练习: LintCode——在线刷题网站,阶梯式训练,可帮助你更快速深入地了解各类面试题型,提供专业导师写的最优代码作为参考(Lintcode 标准答案查询——lintcode 的参考答案 ...

  8. 最强 Java 书单推荐,附学习方法

    技术大佬用1w+字来告诉你该读什么书,循序渐进,并提供百度云盘下载地址.重要的是还有学习方法. 请肆无忌惮地点赞吧,微信搜索[沉默王二]关注这个在九朝古都洛阳苟且偷生的程序员.本文 GitHub gi ...

  9. 一些比较好的国外IT网站

    1.在线编程练习: LintCode --在线刷题网站,阶梯式训练,可帮助你更快速深入地了解各类面试题型,提供专业导师写的最优代码作为参考 (Lintcode 标准答案查询--lintcode 的参考 ...

  10. 国外程序员整理的Java资源大全分享

    Java 几乎是许多程序员们的入门语言,并且也是世界上非常流行的编程语言.国外程序员 Andreas Kull 在其 Github 上整理了非常优秀的 Java 开发资源,推荐给大家. 译文由 Imp ...

随机推荐

  1. JS动态在父元素里追加元素——insertAdjacentHTML

    insertAdjacentHTML() 方法将指定的文本解析为 Element 元素,并将结果节点插入到 DOM 树中的指定位置.它不会重新解析它正在使用的元素,因此它不会破坏元素内的现有元素.这避 ...

  2. OpenJDK里的AsmTools简介

    前言 转自:http://hengyunabc.github.io/openjdk-asmtools/ https://wiki.openjdk.java.net/display/CodeTools/ ...

  3. Go 接口:Go中最强大的魔法,接口应用模式或惯例介绍

    Go 接口:Go中最强大的魔法,接口应用模式或惯例介绍 目录 Go 接口:Go中最强大的魔法,接口应用模式或惯例介绍 一.前置原则 二.一切皆组合 2.1 一切皆组合 2.2 垂直组合 2.2.1 第 ...

  4. srm-50

    刚开始拿到题目没有思路,看了字符串发现也没什么特别的,也没有提示输入什么什么,然后找到main函数,f5进去以后也没什么特别的 然后就看了wp发现得从程序本身出发去解决问题 点开程序,随便输入点什么 ...

  5. Excel数据统计与分析

  6. 【uniapp】【外包杯】学习笔记day07 | 微信小程序轮播图、分类导航、楼层图的开发与实现

    1.创建home分支 2.配置网络请求 由于平台的限制,现需要建立uni-app中使用第三方包请求网络数据请求 在 uni-app 项目中使用 @escook/request-miniprogram  ...

  7. 架构师的知行合一(内容由AI的全文生成,满分100分我打99分)

    大型架构是怎么来的 随着科技的不断发展,越来越多的企业和组织开始意识到数字化转型的重要性.为了更好地适应市场的变化,满足客户的需求,提高企业的竞争力,大型架构成为了企业和组织不可或缺的一部分.那么,大 ...

  8. MVC控制器传DataTable

    MVC中,控制器return Json(DataTable)会出现错误: 序列化类型为"System.Reflection.RuntimeModule"的对象时检测到循环引用. 解 ...

  9. [ABC261D] Flipping and Bonus

    Problem Statement Takahashi will toss a coin $N$ times. He also has a counter, which initially shows ...

  10. uniapp的下载

    简介 - HBuilderX 文档 (dcloud.net.cn) 下载Hbuiler 直接打开HbuilderX.exe就可以直接使用 可以通过他来创建模板 目录