打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
程序员应知应会之代码投毒

正如黑客界有黑客和白帽黑客一样,有些人负责攻击,有些人负责防御。程序员行当里也有投毒和解毒之说。因为大家都知道,我们所在的世界,并不是一个很安全的世界,因此常言说得好,害人之心不可有,防人之心不可无。

下毒的原因有很多种。很多程序员的世界都比较简单,主要是和代码打交道,因此生活也比较无趣。解决问题的途径也比较单一。就像业界著名的例子,一个程序员的老婆被自己领导睡了,然后领导还要把他开掉,然后自己老婆去求情又被领导睡了。于是一怒之下删库,最终很快被抓获,送进局子里蹬缝纫机了。

除此之外,还有很多种原因,例如说对甲方不满,对领导不满,对生活不满等等。这就是在代码中下毒的理由。

还有一些外包公司,担心项目研发完成之后拿不到钱,会故意留些后门或者是下毒。通常情况下,对于一些部署在内部专用的项目,例如说银行、军方这些专门,代码下毒是更为流行的选择。

然而通常情况下,这种下毒的目标虽然是项目方,但是接手的研发人员、运维人员却是最直接的受害者。

因此,无论是作为投毒者还是解毒者,了解代码下毒的技巧,对于一名优秀的程序员来说,都是必备的技能。

例如网上著名的Evil.js,就是一个典型的例子,虽然它的代码效果很简陋,但是还是显示了一定的下毒方法。

下面我们就来简单介绍一下代码下毒的一些方法。

一、变量名的投毒技巧

1.使用不易理解的变量名,如a,b,c

2.使用拼写错误,避免搜索

3.使用与业务功能相反的变量名,比如说商业客户使用privateCustomer,私人用户使用businessCustomer之类

4.使用不易读懂的缩写

5.使用重音字母、看着很像但不是一个字符的字,比如说A,А

6.在相近的代码块内使用重名

7.使用含义混乱的命名

8.接口两端的命名不一致,例如后端叫sex,前端叫gender,并且把sex命名给另一个变量

二、数据类型的投毒技巧

1.在随时间增长的数据中,使用较短的数据类型,使其增长到一定程度里溢出,也可以把起始数字或步长设得比较大以加快溢出速度

2.在某些地方对变量进行强制转型

3.在子类型和父类型之间随机切换

4.多使用复杂的多维数组

5.使用XML混乱代码

6.避免使用精确数据类型,例如说可以频繁的使用floatdouble,不使用intlong或者BigDecimal

三、业务逻辑的投毒技巧

1.将业务逻辑与年份相关联

2.finalizer方法中写混乱代码

3.在条件极为苛刻的if语句中写混乱代码,可以注释为某领导要求

4.创建不必要的对象,并在不同对象中创建很像但不一样的方法

5.在不必要的代码中访问Javabean

6.过度包装,多次包装、深度包装一些核心函数,包装出相似功能

7.在不易达到的条件下使用复杂的死循环

8.将毒药代码写在调用库里

四、注释的投毒技巧

1.更改代码之后不修改注释

2.使用注释误导他人

以上就是常用的一些代码投毒技巧,如果接手的代码发生了难以理解的异常。首先要侧面了解一下代码的情况,如果怀疑代码是被人为投毒,那就要加倍小心,不能相信任何看似没有问题的代码块。必要时,重业务逻辑相对简单,但是接手代码中实现的很复杂的模块。

当然,最好其实是不接手有毒代码。但是毕竟世事无常,凡事要多做一手准备。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
程序员优秀代码注释的5个技巧,谷歌创始人的一段代码相当霸气!
代码规范与代码复审
什么事都得先打好基础,学习面向对象也是如此1(转贴)
代码规范的那些事儿
引入解释性变量(程序员必学代码技巧)
代码大全(Code Complete)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服