五大不良 coding 习惯,你占了几样?
在之前的文章中,我们一起解读了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 习惯,你占了几样?的更多相关文章
- 网上搜集了点资料,学web的人互相分享共同进步吧(php编码的好习惯必须养成)
网上搜集了点资料,学web的人互相分享共同进步吧 一.优秀的代码应该是什么样的? 优秀的PHP代码应该是结构化的.大段的代码应该被分割整理成一个个函数或方法,而那些不起眼的小段代码则应该加上注释,以便 ...
- Tkinter--Text文本框样例
#-*- coding:utf-8 -*- """ Text 文本框样例 实现功能有:Ctrl+a全选文本, 竖向滚动条,横向滚动条(不自动换行) 自动缩放 有谁知道全选 ...
- 关于cf[转]
还不怎么熟悉cf呢.. 你应当知道的关于Codeforces的事情 Codeforces简称: cf(所以谈论cf的时候经常被误会成TX的那款游戏).网址: codeforces.com 这是一个俄国 ...
- 大数据开发实战:Hive优化实战1-数据倾斜及join无关的优化
Hive SQL的各种优化方法基本 都和数据倾斜密切相关. Hive的优化分为join相关的优化和join无关的优化,从项目的实际来说,join相关的优化占了Hive优化的大部分内容,而join相关的 ...
- codeforces之始
很早就听说acmer界的CF嘞!还记得刚开始听到神犇们在讨论CF的时候我还以为是网游CF(穿越火线)呢... 今年刚开学的时候就打算开始打cf的,由于一些事情耽搁了.之后又要准备省赛所以就一直拖到现在 ...
- Android面试题集
前几天整理了Java面试题集合,今天再来整理下Android相关的面试题集合.假设你希望能得到最新的消息,能够关注https://github.com/closedevice/interview-ab ...
- 作为程序员,你关注哪些国外 IT 网站?
1.在线编程练习: LintCode——在线刷题网站,阶梯式训练,可帮助你更快速深入地了解各类面试题型,提供专业导师写的最优代码作为参考(Lintcode 标准答案查询——lintcode 的参考答案 ...
- 最强 Java 书单推荐,附学习方法
技术大佬用1w+字来告诉你该读什么书,循序渐进,并提供百度云盘下载地址.重要的是还有学习方法. 请肆无忌惮地点赞吧,微信搜索[沉默王二]关注这个在九朝古都洛阳苟且偷生的程序员.本文 GitHub gi ...
- 一些比较好的国外IT网站
1.在线编程练习: LintCode --在线刷题网站,阶梯式训练,可帮助你更快速深入地了解各类面试题型,提供专业导师写的最优代码作为参考 (Lintcode 标准答案查询--lintcode 的参考 ...
- 国外程序员整理的Java资源大全分享
Java 几乎是许多程序员们的入门语言,并且也是世界上非常流行的编程语言.国外程序员 Andreas Kull 在其 Github 上整理了非常优秀的 Java 开发资源,推荐给大家. 译文由 Imp ...
随机推荐
- 实战攻防演练--利用微软自带Certutil命令ByPassAV上传C2
Certutil Certutil.exe是Windows操作系统中的合法程序,主要用于管理证书相关操作.它提供了转储和显示证书颁发机构(CA)的配置信息.配置证书服务.备份和还原CA组件,以及验证证 ...
- tailwindcss 选型,以及vue配置使用
一.为什么选择tailwindcss? Tailwind CSS 是一个受欢迎的.功能丰富的CSS框架,它与传统的CSS框架(如Bootstrap)有些不同.以下是一些人们通常对于Tailwind C ...
- JVM SandBox 的技术原理与应用分析
https://www.infoq.cn/article/tsy4lgjvsfweuxebw*gp https://blog.csdn.net/qq_40378034/article/details/ ...
- Doxygen 的学习
https://dongzhixiao.blog.csdn.net/article/details/52190696 来自转载
- [SWPUCTF 2021 新生赛]非常简单的逻辑题
一道简单的代码逆向,根据提供的py代码写出逆向代码,没怎么做过这种题开始没什么思路,原来直接暴力就好 直接写出暴力代码
- python 数据可视化:直方图、核密度估计图、箱线图、累积分布函数图
本文使用数据来源自2023年数学建模国赛C题,以附件1.附件2数据为基础,通过excel的数据透视表等功能重新汇总了一份新的数据表,从中截取了一部分数据为例用于绘制图表.绘制的图表包括一维直方图.一维 ...
- DiscuzQ官方最新v3.0.220211源码编译搭建教程和官方部署教程,适合二开(已本地编译通过,无任何错误)
经过长达半个月的研究! 完成这篇DiscuzQ官方最新版本v3.0.220211的源码编译和官方部署教程.适合喜欢二次开发的小伙伴们,已经通过本地编译测试,保证没有任何错误. 具体教程在我搭建的dzq ...
- Kubernetes 漫游:etcd
概述 etcd 是一个基于 Raft 协议实现.开源的.分布式的键值存储系统.主要用于在分布式系统中提供强一致性和高可用性的数据存储. etcd 在 Kubernetes 中的作用如下: 集群状态数据 ...
- Object.assign () 和深拷贝
先看看啥叫深拷贝?啥叫浅拷贝? 假设B复制了A,修改A的时候,看B是否发生变化: 如果B跟着也变了,说明是浅拷贝,拿人手短!(修改堆内存中的同一个值) 如果B没有改变,说明是深拷贝,自食其力!(修改堆 ...
- 【Android】无法通过drawable下的selector类型改变背景颜色?
举例 我在darwable目录下创建了selector文件,并设置了如下内容 <?xml version="1.0" encoding="utf-8"?& ...