程序员默认规范:密码不能写在代码里。
使用密码场景
- 数据库密码
- 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文件里做环境变量,后端代码读取环境变量即可。