程序员默认规范:密码不能写在代码里。

使用密码场景

  1. 数据库密码
  2. API key

比如我遇到的就是前端阿里云的OSS SDK密钥

  1. const OSS = require("ali-oss");
  2. const client = new OSS({
  3. region: "oss-cn-shenzhen",
  4. accessKeyId: "LTAI4GLDSUEPQbMhbsxiFWMu",
  5. accessKeySecret: "bFMhkuHyXs8ol20KAyUw54J4zZvBx8",
  6. });
  7. async function putObject () {
  8. let result = await client.put('exampleobject.txt', data);
  9. console.log(result);
  10. }

为什么密码不能写在代码里?

1.用户通过前端界面可接触到密码

若在前端代码中写密码,前端代码通过webpack打包之后,会将密码打包入bundle.js里,即使会编码,也是可破解的。用户可通过控制面板接触到前端代码。

2.其他开发者可接触到密码

若是代码库里存储密码,其他开发者可看到密码也存在风险。

解决方法

前端:走后端接口

避免前端直接使用密码, 可使用后端接口。

后端:dotenv

dotenv有javascript、python、ruby版本,使用.env文件存储各种密码,将.env文件放在服务器上,通过dotenv来读取密码。

后端:写入环境变量

使用脚本将密码写入.bashrc文件里做环境变量,后端代码读取环境变量即可。

image.png
image.png