使用NEXT_PUBLIC_暴露环境变量到浏览器安全吗?



根据Next.js关于环境变量的文档:

默认情况下,环境变量只在Node.js环境中可用,这意味着它们不会暴露给浏览器。

为了向浏览器公开变量,必须在变量前面加上NEXT_PUBLIC_前缀。例如:

NEXT_PUBLIC_ANALYTICS_ID=abcdefghijk

避免环境变量暴露不就是重点吗?使用NEXT_PUBLIC_安全吗?不希望页面访问者访问的秘密,例如API密钥?

文档继续说变量是在构建时加载的,但没有解释是否有人可以在项目部署后从浏览器访问它们。

NEXT_PUBLIC_开头的env变量值被内联到代码中。变量名将被实际值替换,并且该值在检查chrome开发工具时暴露给用户。

在我看来,环境变量的意义在于根据不同的环境有不同的值。如果实现正确,安全性是你可以得到的。

next.js的情况下,您可以选择使用不以NEXT_PUBLIC_开始的服务器端环境变量。如果你真的想保护你的密钥,只把它们保存在服务器端运行的代码中,比如getServerSidePropsmiddleware等。

示例:您想要进行API调用,只需调用next.jsAPI(另一个服务器端功能)并从那里执行实际的API调用。这样你的API_KEY就得到了保护。