程序员如何敲出更安全的代码?

还记得《黑客帝国》里尼奥终于看到矩阵世界的真实样貌一片数字雨时的震撼么?超级黑客尼奥纵身跃入程序特工史密斯身体里,使其飞灰湮灭的一幕更是酷的不得了!


如今,透过电脑屏幕我们能够发现,那个由字母、数字、符号构成的数字硅基世界,正在与我们身处的真实物理世界越来越深入的交融在一起。


万物互联时代下,代码犹如数字世界的血液流淌在每个角落,让数字世界散发着勃勃生机。但越来越多的电脑病毒、木马、间谍软件,以及越来越复杂且破坏力更大的各类恶意攻击,却在不断对数字世界造成破坏。


正如白细胞是人体与疾病斗争的“安全卫士”,网络安全技术、产品也在发挥着“数字世界白细胞”的作用,对抗网络空间世界里不时隐现的恶意攻击。


回顾往昔,你坐在计算机面前敲打出来的第一个程序还是那个经典的“HelloWorld”么?当人们需要对网络世界深入了解时,首选要做的一件事情就是学习程序的编写,掌握人类与数字世界交流的语言。随着人们写成一行行代码,一个个功能各异的程序不断诞生、上线、运行。


而海量代码里的安全缺陷、安全漏洞,也在不断让程序产生异常,进而导致信息系统被入侵,金融、工业、农业、交通、医疗等行业业务系统被破坏。从这个角度来看,网络安全的本质正是程序安全问题、代码安全问题。


程序员如何敲出更安全的代码?

图片源自网络,仅做配文展示


作为软件开发人员,如何开发出相对安全的代码呢?今天的文章,小渡就和大家一起聊聊代码安全的问题。


小渡发现身边很多程序员,遇到很多安全问题,还是无从下手:


每次代码上线都被爆出有各种Web安全漏洞,那么,应该怎么样去避免自己写出这些包含漏洞的代码呢?


在项目中,大家都会使用各种第三方插件来辅助开发。那么,是否能够意识到,这些插件中的漏洞,也是很多黑客利用的点。那么,有哪些方法可以帮助你去进行防护呢?


除此之外,代码的安全性还会造成很多问题,甚至带来一些安全漏洞:


1、 影响团队合作,降低效率


对于共同完成项目的团队而言,如果没有统一的代码规范,最终整合代码时,可能会出现看不懂命名,或者阅读过程不断询问的情况,导致团队效率低下,甚至造成成员之间的矛盾;例如gitpush -f,把别人的劳动成果全部覆盖掉,出现一次就会遭到全员围攻;


2、 提高维护成本


代码不规范导致可读性降低,后期的代码维护会耗费更多人力甚至财力成本;一旦代码越来越多,最后的维护就难以为继,给运维人员造成很大负担;


3、 引发各种bug


如果输入输出参数、异常处理、日志处理等没有规范,很容易导致大量低级bug,还很难找到bug的原因;


4、 不利于代码审查,甚至造成安全漏洞


代码审查是纠正代码错误,保证开发周期安全顺利进行的重要一步。如果代码不规范,就会加重代码审查的工作量和难度,导致代码审查工作没有根据还浪费时间。


某些情况下,代码不规范还会造成安全漏洞,此前Morpheus智能合约爆出的重大安全漏洞,就是大小写错误造成的;


5、 不利于程序员自身的成长


有些人可能没有意识到代码规范的重要性,有些人意识到了但由于项目时间紧、流程繁琐等原因而不去遵循。这跟当前开发流程与安全之间的关系很像。


很多人为了速度而牺牲前期的必要流程,却给后续的工作带来了更多麻烦。其实,规范的代码有助于理解开发语言、模式和架构,也有利于提升开发水平。


对于公司和团队而言,制定符合实际情况的开发规范并非难事,重要之处在于每个人自己认识到规范的重要性,以及养成规范的习惯并坚持贯彻。


接下来我们就来探究一下,如何制定一个相对通用的安全编码方案。




程序员如何敲出更安全的代码?

字符串的安全方案




程序员如何敲出更安全的代码?


直接使用字符串(x)



不建议使用理由:直接定义使用字符串,因为字符串是一个常量,所以我们直接能在静态反汇编中直接看到字符串的数据信息。


如果直接把代码的字符串信息直接暴露给大家,这样大家就可以通过字符串信息做一些对代码不安全的事情了。




程序员如何敲出更安全的代码?


字符串赋值到数组使用(



建议使用理由:将字符串写到数组里面并进行赋值,使得字符串存放在堆里面,这样在程序的字符串常量信息就无法直接看到字符串信息,这样进行静态分析(IDA)的时候字符串信息就没有展示了,这个需要进行动态分析(ollydbg)才能分析到字符串信息,从而加强代码的安全性。




程序员如何敲出更安全的代码?

调用系统函数安全方案




程序员如何敲出更安全的代码?


直接调用系统的函数(x)



不建议使用理由:我们在编码过程中,有很多功能系统都已经有提供的函数接口,一般情况下我们都是直接调用系统函数直接进行实现功能。


但你知道吗?你这样直接调用系统函数在一些场景下是不安全的,当你的程序在被安全逆向研究的时候,直接可以通过程序的导入表,以及反汇编看到调用的系统函数,这样我们只要一查下系统函数的功能,那么就可以知道大概的功能点,还有只要一挂钩(HOOK技术)上系统的函数,那么你所调用的系统函数的功能就失效了。




程序员如何敲出更安全的代码?


自定义实现函数再调用函数(√)



建议使用理由:我们对于关键功能函数建议还是采用自己去实现函数功能,再去调用,这样可以加强程序被直接分析的难度,从而加强程序的安全性。


程序员如何敲出更安全的代码?

图片源自网络,仅做配文展示


本质上,安全漏洞就是一些bug,它们可能会导致应用程序及其数据遭受破坏。当编程错误威胁到数据的可访问性、完整性或机密性时,就属于安全漏洞领域。在大多数情况下,这些漏洞只是一些人为错误。只要人类继续编写代码,错误就会发生,漏洞也会出现在我们的项目中。


因此,我们的问题是如何管理所使用软件中的漏洞。首先,最重要的是我们需要遵循最佳实践来进行安全编程。虽然批评某人的代码不够严谨很简单,但只有批评还不够,我们还需要提升自我。


除了遵循编程的最佳实践外,我们还需要检查代码中的漏洞,而不仅仅是在部署之前。在依赖项之上构建了核心应用程序,却发现其中存在一些严重的漏洞,这是一件十分痛苦的事情,你不得不含泪默默地重新编写这部分代码。


如果你了解软件开发生命周期各个阶段测试错误的重要性,那么就应该明白检查可能将你和用户置于危险之中的安全漏洞同样重要。


程序员如何敲出更安全的代码?

图片源自网络,仅做配文展示


想要保证代码的安全性,就需要我们在项目开发中需要写高内聚,低耦合的代码,同样也需要写一些没有bug的代码,更需要写一些更加相对安全的代码,最后,还需要写一些能增加逆向破解者分析程序的难度。


在追求开发效率的同时,一定要把“安全”这俩字放在心头。 尤其是在大厂,对安全的要求胜过一切。比如千万用户的数据保密、如何对密码进行多次加密、如何做身份认证等等……


不得不说,作为一个普通的程序员,学好安全基础,尽早做好安全规划,才能随时应对可能出现的安全漏洞。这样,不仅我们能为公司贡献更安全的应用,也能为自己日后的进阶做好铺垫。

展开阅读全文

页面更新:2024-03-10

标签:代码   字符串   程序员   安全漏洞   函数   漏洞   安全性   错误   功能   建议   数字   程序   项目   系统   世界   科技   信息

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top