程序员默认规范:密码不能写在代码里。
使用密码场景
- 数据库密码
- API key
比如我遇到的就是前端阿里云的OSS SDK密钥
const OSS = require("ali-oss");const client = new OSS({region: "oss-cn-shenzhen",accessKeyId: "LTAI4GLDSUEPQbMhbsxiFWMu",accessKeySecret: "bFMhkuHyXs8ol20KAyUw54J4zZvBx8",});async function putObject () {let result = await client.put('exampleobject.txt', data);console.log(result);}
为什么密码不能写在代码里?
1.用户通过前端界面可接触到密码
若在前端代码中写密码,前端代码通过webpack打包之后,会将密码打包入bundle.js里,即使会编码,也是可破解的。用户可通过控制面板接触到前端代码。
2.其他开发者可接触到密码
若是代码库里存储密码,其他开发者可看到密码也存在风险。
解决方法
前端:走后端接口
后端:dotenv
dotenv有javascript、python、ruby版本,使用.env文件存储各种密码,将.env文件放在服务器上,通过dotenv来读取密码。
后端:写入环境变量
使用脚本将密码写入.bashrc文件里做环境变量,后端代码读取环境变量即可。


