API 密钥是否通过 get 请求暴露?
Is API key exposed through get request?
我正在构建一个 Node/React 应用程序,我在其中将我的 API 密钥放在我的 .gitignore 中的 .env 文件中。前端使用 Axios 和 UseEffect 挂钩向 API 端点发出获取请求,并使用 process.env 提供的 API 键。我理解为什么隐藏 API 键而不是将该信息提交给 git 是一种很好的做法,但是我的问题是关于 [=21= 是否还需要做(或可以做)一些事情] 密钥通过检查 chrome 开发人员工具中的请求暴露出来?
//on component mount fetch the images
useEffect(async ()=>{
const results = await axios(
`https://pixabay.com/api/?key=${process.env.PIXA_API_KEY}`
);
},[])
例如,如果用户在我的项目的浏览器中使用 chrome 工具,他们仍然可以在请求中看到我的 API 密钥。就我而言,这并不是什么大问题,因为这个特定的 API 是免费的,并且该项目仅供个人使用,但我想知道在商业项目中如何解决这个问题,其中 API 可能是付费的在用吗?是什么阻止我在其他人的应用程序上使用 chrome 开发工具并窃取他们的 API 密钥来发出我自己的请求?
这是一个很好的观察。事实上,您的客户端代码中不能有任何秘密。任何模糊、混淆甚至加密都无法阻止攻击者窃取您的秘密。客户端代码可供任何人阅读,需要这样处理。
如果涉及您不想公开的带有密钥的私有API,您需要从服务器调用它们。所以流程看起来像这样:
我正在构建一个 Node/React 应用程序,我在其中将我的 API 密钥放在我的 .gitignore 中的 .env 文件中。前端使用 Axios 和 UseEffect 挂钩向 API 端点发出获取请求,并使用 process.env 提供的 API 键。我理解为什么隐藏 API 键而不是将该信息提交给 git 是一种很好的做法,但是我的问题是关于 [=21= 是否还需要做(或可以做)一些事情] 密钥通过检查 chrome 开发人员工具中的请求暴露出来?
//on component mount fetch the images
useEffect(async ()=>{
const results = await axios(
`https://pixabay.com/api/?key=${process.env.PIXA_API_KEY}`
);
},[])
例如,如果用户在我的项目的浏览器中使用 chrome 工具,他们仍然可以在请求中看到我的 API 密钥。就我而言,这并不是什么大问题,因为这个特定的 API 是免费的,并且该项目仅供个人使用,但我想知道在商业项目中如何解决这个问题,其中 API 可能是付费的在用吗?是什么阻止我在其他人的应用程序上使用 chrome 开发工具并窃取他们的 API 密钥来发出我自己的请求?
这是一个很好的观察。事实上,您的客户端代码中不能有任何秘密。任何模糊、混淆甚至加密都无法阻止攻击者窃取您的秘密。客户端代码可供任何人阅读,需要这样处理。
如果涉及您不想公开的带有密钥的私有API,您需要从服务器调用它们。所以流程看起来像这样: