程序员如何敲出更安全的代码?
还记得《黑客帝国》里尼奥终于看到矩阵世界的真实样貌一片数字雨时的震撼么?超级黑客尼奥纵身跃入程序特工史密斯身体里,使其飞灰湮灭的一幕更是酷的不得了!
如今,透过电脑屏幕我们能够发现,那个由字母、数字、符号构成的数字硅基世界,正在与我们身处的真实物理世界越来越深入的交融在一起。
万物互联时代下,代码犹如数字世界的血液流淌在每个角落,让数字世界散发着勃勃生机。但越来越多的电脑病毒、木马、间谍软件,以及越来越复杂且破坏力更大的各类恶意攻击,却在不断对数字世界造成破坏。
正如白细胞是人体与疾病斗争的"安全卫士",网络安全技术、产品也在发挥着"数字世界白细胞"的作用,对抗网络空间世界里不时隐现的恶意攻击。
回顾往昔,你坐在计算机面前敲打出来的第一个程序还是那个经典的"HelloWorld"么?当人们需要对网络世界深入了解时,首选要做的一件事情就是学习程序的编写,掌握人类与数字世界交流的语言。随着人们写成一行行代码,一个个功能各异的程序不断诞生、上线、运行。
而海量代码里的安全缺陷、安全漏洞,也在不断让程序产生异常,进而导致信息系统被入侵,金融、工业、农业、交通、医疗等行业业务系统被破坏。从这个角度来看,网络安全的本质正是程序安全问题、代码安全问题。
图片源自网络,仅做配文展示
作为软件开发人员,如何开发出相对安全的代码呢?今天的文章,小渡就和大家一起聊聊代码安全的问题。
小渡发现身边很多程序员,遇到很多安全问题,还是无从下手:
每次代码上线都被爆出有各种Web安全漏洞,那么,应该怎么样去避免自己写出这些包含漏洞的代码呢?
在项目中,大家都会使用各种第三方插件来辅助开发。那么,是否能够意识到,这些插件中的漏洞,也是很多黑客利用的点。那么,有哪些方法可以帮助你去进行防护呢?
除此之外,代码的安全性还会造成很多问题,甚至带来一些安全漏洞:
1、 影响团队合作,降低效率
对于共同完成项目的团队而言,如果没有统一的代码规范,最终整合代码时,可能会出现看不懂命名,或者阅读过程不断询问的情况,导致团队效率低下,甚至造成成员之间的矛盾;例如gitpush -f,把别人的劳动成果全部覆盖掉,出现一次就会遭到全员围攻;
2、 提高维护成本
代码不规范导致可读性降低,后期的代码维护会耗费更多人力甚至财力成本;一旦代码越来越多,最后的维护就难以为继,给运维人员造成很大负担;
3、 引发各种bug
如果输入输出参数、异常处理、日志处理等没有规范,很容易导致大量低级bug,还很难找到bug的原因;
4、 不利于代码审查,甚至造成安全漏洞
代码审查是纠正代码错误,保证开发周期安全顺利进行的重要一步。如果代码不规范,就会加重代码审查的工作量和难度,导致代码审查工作没有根据还浪费时间。
某些情况下,代码不规范还会造成安全漏洞,此前Morpheus智能合约爆出的重大安全漏洞,就是大小写错误造成的;
5、 不利于程序员自身的成长
有些人可能没有意识到代码规范的重要性,有些人意识到了但由于项目时间紧、流程繁琐等原因而不去遵循。这跟当前开发流程与安全之间的关系很像。
很多人为了速度而牺牲前期的必要流程,却给后续的工作带来了更多麻烦。其实,规范的代码有助于理解开发语言、模式和架构,也有利于提升开发水平。
对于公司和团队而言,制定符合实际情况的开发规范并非难事,重要之处在于每个人自己认识到规范的重要性,以及养成规范的习惯并坚持贯彻。
接下来我们就来探究一下,如何制定一个相对通用的安全编码方案。
字符串的安全方案
直接使用字符串(x)
不建议使用理由: 直接定义使用字符串,因为字符串是一个常量,所以我们直接能在静态反汇编中直接看到字符串的数据信息。
如果直接把代码的字符串信息直接暴露给大家,这样大家就可以通过字符串信息做一些对代码不安全的事情了。
字符串赋值到数组使用( √ )
建议使用理由: 将字符串写到数组里面并进行赋值,使得字符串存放在堆里面,这样在程序的字符串常量信息就无法直接看到字符串信息,这样进行静态分析(IDA)的时候字符串信息就没有展示了,这个需要进行动态分析(ollydbg)才能分析到字符串信息,从而加强代码的安全性。
调用系统函数安全方案
直接调用系统的函数(x)
不建议使用理由: 我们在编码过程中,有很多功能系统都已经有提供的函数接口,一般情况下我们都是直接调用系统函数直接进行实现功能。
但你知道吗?你这样直接调用系统函数在一些场景下是不安全的,当你的程序在被安全逆向研究的时候,直接可以通过程序的导入表,以及反汇编看到调用的系统函数,这样我们只要一查下系统函数的功能,那么就可以知道大概的功能点,还有只要一挂钩(HOOK技术)上系统的函数,那么你所调用的系统函数的功能就失效了。
自定义实现函数再调用函数(√)
建议使用理由: 我们对于关键功能函数建议还是采用自己去实现函数功能,再去调用,这样可以加强程序被直接分析的难度,从而加强程序的安全性。
图片源自网络,仅做配文展示
本质上,安全漏洞就是一些bug,它们可能会导致应用程序及其数据遭受破坏。当编程错误威胁到数据的可访问性、完整性或机密性时,就属于安全漏洞领域。在大多数情况下,这些漏洞只是一些人为错误。只要人类继续编写代码,错误就会发生,漏洞也会出现在我们的项目中。
因此,我们的问题是如何管理所使用软件中的漏洞。首先,最重要的是我们需要遵循最佳实践来进行安全编程。虽然批评某人的代码不够严谨很简单,但只有批评还不够,我们还需要提升自我。
除了遵循编程的最佳实践外,我们还需要检查代码中的漏洞,而不仅仅是在部署之前。在依赖项之上构建了核心应用程序,却发现其中存在一些严重的漏洞,这是一件十分痛苦的事情,你不得不含泪默默地重新编写这部分代码。
如果你了解软件开发生命周期各个阶段测试错误的重要性,那么就应该明白检查可能将你和用户置于危险之中的安全漏洞同样重要。
图片源自网络,仅做配文展示
想要保证代码的安全性,就需要我们在项目开发中需要写高内聚,低耦合的代码,同样也需要写一些没有bug的代码,更需要写一些更加相对安全的代码,最后,还需要写一些能增加逆向破解者分析程序的难度。
在追求开发效率的同时,一定要把"安全"这俩字放在心头。 尤其是在大厂,对安全的要求胜过一切。比如千万用户的数据保密、如何对密码进行多次加密、如何做身份认证等等……
不得不说,作为一个普通的程序员,学好安全基础,尽早做好安全规划,才能随时应对可能出现的安全漏洞。这样,不仅我们能为公司贡献更安全的应用,也能为自己日后的进阶做好铺垫。
电脑音箱中的全能王,创新T60深度评测Hello,大家好,欢迎来到小众数码,我是Jupit3r。创新T系列的2。0声道桌面音箱因为其出色的音质和亲民的售价在全球范围收获了大批的粉丝。发布于2009年的Gigaworks
苹果最新技术发布,用户隐私却受到侵犯最近因为一个新功能的上线导致苹果被骂得很惨,即在iOS15中,苹果可扫描iPhone所有相册。但其实在我看来,这也是罪有应得,虽然这项技术设立的初衷是保护受虐儿童,但是通过这一功能
升级Windows11预览版详细图文步骤,收藏不亏微软正式推送Windows11预览版已经有一段时间辣!这里是不尝鲜不舒服斯基的S姐,今天决定祭出自己的私人笔记本电脑,给大家来一期尝鲜指南,请笑纳!(总过程约30分钟至1小时)。阅
Word有什么技巧是让你相见恨晚的?曾经一度,我特别喜欢Word,什么文件都用Word来做,自以为掌握了大部分的Word技巧。但是,后来碰到两个Word难题后,我发现了自己的Word短板,也感觉相见恨晚。1自动为文章
你认为什么样的家居可以拯救新时代懒人?新时代带来新挑战,也出现了很多新新物种例如懒癌患者来自懒癌患者的自述每天上完班已经很累了,回到家里很多事情还要自己干,我可太难了,有人帮帮我吗?PC酱来了!老弟!拯救懒癌患者家电清
有哪些网站可以下免费的电子书?鸠摩搜书简介鸠摩搜书是一个电子书搜索引擎。它汇集了多个网盘和电子书平台的资源,真所谓大而全。而且它还支持筛选txt,pdf,mobi,epubazw3格式文件。还显示来自不同网站的
微信8。0。11内测更新,朋友圈又变了前两天,微信官方刚刚发布了安卓8。0。10正式版。没想到,8。0。11内测版本这么快就出来了。这次优先获得内测权的是安卓,总算比苹果抢先一步了。和8。0。10正式版相比,差别不大,
Linux常用命令全集整理!550多个命令,PDF开放下载,手慢无今天给大家分享的这个Linux命令速查手册,文档里给大家精心整理了550多个命令,1303页,由于内容太多,只能截图展示部分文档内容。完整版文档领取方式见文末部分文档目录展示部分命
你手机相册里有哪些自己用了很久舍不得换的壁纸?喜欢的可以挑一个舍不得换的壁纸贼多,好看的壁纸也贼多,换不换呢,就得看心情了O()O哈哈分享一组卡通动漫壁纸各种风格都有,性感的,呆萌的,个性的,清纯的等等。总有一款适合你,喜欢的
当一批神秘人走进碧桂园工地全文共187字,阅读全文约3分钟。机器人建房的梦想离我们还很遥远吗并不是!近期碧桂园在全国的一批项目迎来新工友博智林建筑机器人建筑机器人进入工地到底是一种怎样的体验让我们一起直击现
央广网评警惕变了味的电商学院成陷阱近日,电商培训屡遭投诉。一些电商学院打着免费试学量身定制三天变现的名义,以跨境电商快速入门手把手教你带货为教授课程,吸引了很多想要实现斜杠收入的创业者。这些电商学院的开办者赚得盆满