对于后端而言,我们常有“删库跑路”的说法,这说明后端的操作对于信息系统而言通常影响很大,可以轻易使信息系统宕机、崩溃,直接导致项目失败。所以,不要去逼后端程序员!
作为前端程序员,我们似乎自己也认为前端相比于后端,代码的安全风险更低。一种常见的看法是,前端随便整,掀不起大波浪!大不了是一些显示性问题!
我们可以这样开玩笑,但作为一名前端开发者,良好的安全意识仍然是必需的,事实上一些问题不仅仅作用于显示层面。更现实一些的层面是,你如何确保你的代码运行稳定,不会给公司、客户带来损失,进而丢掉自己的饭碗?
这不是危言耸听,如果意识缺乏,前端是有可能引发重大问题,丢掉自己的饭碗的。本文试图分析,前端究竟哪些操作可能存在重大风险,以便对各位有所启发。
第一章 代码兼容性考虑——意识不足可能丢掉你的饭碗
有人可能认为,代码兼容性问题,即便出现影响也不大,其理由是:
- 并非开发者逻辑漏洞,而是客户端、平台、设备千差万别所致
- 大部分的用户是完全正常的
- 代码兼容性问题无法得到100%的保障
这么说,实际上是低估了代码兼容性的影响。我们不否认,许多兼容性对用户影响相对比较小,或者说影响的用户数量很少,又或者影响的是那些使用陈旧设备、客户端版本较低、相对不那么重要的客户。
但,代码兼容性是有可能导致你丢掉饭碗的,理由是
公司都是追求效益至上,一旦因为兼容性问题影响到几分之一以上的用户,这仍然算是极为严重的问题。比较典型的案例有,ios平台不支持某属性,安卓某版本以下的chrome不支持某属性、低于某版本的app不支持某jsbridge调用等,直接导致客户端白屏。因此给开发者的建议是 ,对于js、正则、css不熟悉的写法,一定需要查明兼容性,明确影响范围,尽量避开不熟悉的写法。譬如,正则断言、findLastIndex这都是笔者身边真实发生过引发内部复盘的重大代码性事件。当然,就影响而言,一般css兼容性导致的影响会小很多。
一旦到这种层级,内部复盘追责几乎是少不了的。影响到几分之一的用户,对于公司的客户收入可能是影响很大的。、
第二章 业务兼容性考虑——老用户直接崩溃的重大事件
业务兼容性,是一个极容易被程序员忽略的角度,尤其前端程序员。更准确的讲,这应该是产品经理、程序员共同考虑的问题。
如果产品经理在业务兼容性考虑上有所欠缺,那么程序员也应该做适当考虑和提醒,切忌不做思考的直接编码。
下面是一些典型的案例:
- 业务层面要求修改分享链接:这时程序员应该高度敏感,这是可能导致存量用户崩溃的重大事件。这就是说,虽然软件系统的所有展示都已经替换成了新链接,但对于以前已经分享出去的老链接,用户仍然会使用,如果老链接直接不可用,就会导致大量崩溃。用户完全过渡到接受新链接,必然是需要一个过程,不可能是一蹴而就的。这个事件在笔者身边曾多次发生过。
- 业务层面需要调整表单字段。这时,程序员应该意识到,对于老用户而言,他的一些字段已经存入数据库,而在表单调整时,他的数据可能会被读出,自动填入表单,但由于表单字段的调整,有可能直接导致显示层面、流程层面的直接问题,这也属于业务兼容性的重大事件。
这种业务兼容性事件,往往是影响到存量用户的使用流程,影响不可谓不大。
第三章 业务流程把控——评审不细致可能丢掉你的饭碗、
听起来似乎评审和丢饭碗没有直接的关系,这也就是个工作方式的问题,但实际上,在评审中,如果不够细致,可能导致技术上无法实现、项目延期,就有可能引发严重后果了。
就笔者亲身经历而言,在流程式交互设计时,产品经理容易想当然的将不同流程放至不同页面,又存在跨页面的大量判断和数据传递。这时,一名专业的程序员应该斩钉截铁的驳斥产品经理的不合理设计。笔者曾经两度迁就这种不合理的设计,导致项目存在延期风险、技术上过于复杂,虽然最终完成了,但仍让我心有余悸。、
所以,如果你不能从专业的角度,纠正产品经理的复杂设计,那么你可能最终在实现上出现困难,项目延期,最终导致内部复盘,责任会挂在你的身上。
第四章 区分环境意识——不良习惯可能会让你丢掉饭碗
在开发中为了效率或者方便测试,往往会写定一些配置,这些配置仅仅适用于开发、测试环境,一旦上线,则需要替换成真正的线上配置。
这就要求我们在上线之前,一定要做好记录,哪些是需要做替换的,并在上线前替换,一旦忘了替换,则会引发线上问题。
譬如,某购物软件给用户的推送消息变成了“测试”,则可以想象开发人员可能是忘了替换一些开发中写死的配置,这无疑会给用户带来不良影响。
第五章 权限配置——缺乏意识可能会直接导致上线失败
对于公司的服务器而言,一般会配置权限,因此一些开发和测试环境能跑通的情况,到了正式环境机器上面,由于权限限制,就无法跑通了。
前端比较典型的有csp限制等,这些限制可能使得正式环境上面脚本无法运行,从而功能无法正常使用。
这要求开发者提早熟知公司服务器的权限限制,提早与运维部门确定,做好上线权限配置方案。
第六章 攻击防范——缺乏意识可能引发系统被入侵
- 前端一般需要防范xss攻击,这要求代码中一定不能给恶意用户植入恶意代码的机会,如果缺乏这种意识,当公司遭遇攻击,就离开丢掉饭碗不远了。当然,远远不止xss攻击。
- 另外,公司的安全系统可能要求不能直接使用第三方脚本,要使用则必须经过安全审查,如果不经安全审查直接调用第三方脚本,则可能是触发安全红线的行为,可能会让你丢掉饭碗。
- 除此之外,公司可能有一些敏感信息不能暴露给用户,这时需要做屏蔽或者替换处理。譬如,敏感域名不能向外暴露。
作为程序员,一定需要时时有安全意识,尤其对于小型企业,安全上面可能不够完善,这时程序员切记不能墨守成规不去防范,安全上面需要反复深入研究。
第七章 卡死——死循环可能让你丢掉饭碗
前端虽然不直接操作用户数据库,但在程序中会存在大量定时器、循环、遍历的场景,这时,程序员如果不能充分掌控自己代码的边界,那么就很可能写出死循环这样的代码,而一旦出现这种情况,那么最轻也会内部复盘!
对策是,凡是循环、遍历、定时器都需要清晰掌控你的边界。
莫言前端足够安全,稍有不慎,仍然可能丢掉你的饭碗。
那么,你还知道前端哪些会引发职场生存危机的事件呢,欢迎留言讨论。