背景
因为大环境的持续低迷,开源节流风气横行,码农们重新把防御式编程的概念拎出来重新定义。最近浏览了几篇防御式编程思路,于是我磨刀霍霍带带节奏。
防御式三板斧
代码管理✘
代码基本属于Git管制,code、记录基本透明化。
本地开发(1)✔
以JavaScript为例,主流框架都进行了工程化管理。本地开发以nodejs的npm包管理器为指令集管理。常见指令:
// 启动本地服务
npm run start
// 打包部署包
npm run build
// 本地远程部署
npm run deploy
第一板斧就砍在这里,给npm run [script]指令加执行条件,npm run pre[script]前置钩子指令直接执行就可以拎出来做文章。在前置钩子指令中执行node脚本并且屏蔽日志。
"prestart": "npm run prev:win --silent",
"prev:win": "node ./tests/beforewin",
beforewin.js脚本里面做什么呢?设置一把常规钥匙,输入正确才能正常执行npm run [start|build|deploy]。
触发Key验证
输入Key错误
输入Key成功
操控终端(2)✔
第二板斧砍在终端上,监听终端上的快捷键及指令执行情况。
- 监听
Ctrl + C,预防强行退出前置钩子指令直接执行npm run [start|build|deploy]。
process.on('SIGINT', () => {
console.log('接收到 Ctrl+C 信号,停止执行整个脚本...');
process.exit();
});
- 监听指令执行顺序,确保前置钩子指令必须执行。
加密与解密(3)✔
第二板斧砍在加密与解密上。
- 让执行脚本变成个沙箱,脱离业务代码管制。
// 发布一个npm包,隐式引入项目(项目中引入一个自研公共包,以子包方式嵌入)。
"dependencies": {
"mx-utils": "^1.0.1",
}
- Key的设置由自研加密算法加密设置(只要自己能理解就行☹)
// 关键字符阵列化,以角度和0,0坐标偏移距离在阵列中标记,生成加密文本
const array = 'a|b|c|d|e|f|...';
// 加密算法默认iv=0081,角度分为8份,坐标偏移距离为1
abm ---> 000104511802
a --->角度为0默认补全3位(000),第四位以0,0坐标偏移距离(1)
b --->角度为45默认补全3位(045),第四位以0,0坐标偏移距离(1)
m --->角度为180(180),第四位以0,0坐标偏移距离(2)
- Key的识别比对由自研解密算法处理
备注
上述防御式编程思路属于歧路,不建议用于实践。弘扬正能量,文心一言防御型编程正确概念如下:
防御式编程是一种编程实践,旨在减少软件中的错误,增加程序的健壮性,并提供更可靠的软件。其核心理念是在编写代码时考虑到各种可能的异常情况,并采取措施来预防和处理这些异常情况。
防御式编程的一些常见实践包括:
- 输入验证:验证所有输入数据,确保它们符合预期的格式和类型,并在必要时进行清理或转换。
- 错误处理:在可能出现错误的情况下,使用异常处理机制来捕获和处理错误。
- 防御性读取:从文件或数据库中读取数据时,检查读取操作是否成功,并采取适当的措施来处理读取错误。
- 冗余代码:编写额外的代码来检查和纠正可能的错误或异常情况。
- 边界检查:检查数组、列表和其他数据结构的边界条件,以防止越界访问。
- 安全性:采取措施来防止安全漏洞,例如通过使用安全的编程实践和库来加密数据和验证用户输入。
通过实施防御式编程实践,可以大大提高软件的质量和可靠性,并减少因错误而导致的软件崩溃、数据丢失或安全问题。