提问人:Sharp Dev 提问时间:5/21/2022 更新时间:5/28/2022 访问量:1073
Next.JS目录结构和 JSON 机密的安全性
Next.JS security of directory structure and JSON secrets
问:
我有一个关于Next.JS目录的访问及其访问要求的安全问题。
我有一个根文件夹,里面有我的页面、public、src、styles、models 文件夹。
在 src 文件夹中,我有一个空的 JavaScript 对象的settings.json文件。这个想法是将设置添加到此文件中并由 api 路由访问,以检查可以在此settings.json文件上修改的设置......
我想知道的是客户端是否真的可以以某种方式读取/访问 src 目录并获取settings.json文件。
我想把密钥放在这里,这样我就可以轻松更改密钥,而无需重新启动服务器。因此,我可以实时更新密钥,并将其应用于settings.json文件。然后更新将立即生效,我不必更改环境变量并重新启动服务器。
在 src 目录中保留和使用 json 文件来存储机密数据是否安全?如果没有,有没有办法为此目的保留和使用 json 文件?
感谢您的帮助和信息。
答:
正如juliomalves所指出的,客户端代码将无法访问服务器上的目录或文件,但公共目录除外。
Next 使您能够从此处所述提供静态资产[root]/public
注意:Next.js只会提供构建时公共目录中的资产。
如果此目录被重命名,则这些资产将不再可从客户端获得。
注意:不要将公共目录命名为其他任何名称。该名称无法更改,并且是用于提供静态资产的唯一目录。
“我把一个settings.json文件放在那个 .env 文件旁边,并在 api 路由中要求它,客户端是否可以以某种方式下载该settings.json文件,而无需我故意向他们发送内容/文件本身?”
从 api 路由提供信息的唯一方法是明确创建一个路由来调用(或)使用从该文件导入的数据。Api 路由从未捆绑在客户端,而只存在于服务器上,如此处所述。res[ponse].send()
res.json()
文件夹 pages/api 中的任何文件都映射到 /api/*,并将被视为 API 端点而不是页面。它们是仅限服务器端的捆绑包,不会增加客户端捆绑包的大小。
“我想知道的是,客户端是否真的可以以某种方式读取/访问 src 目录并获取settings.json文件。”
如上所述,只有目录中的资产才能通过路径作为文件进行访问。在 Next 中,目录永远无法作为静态资产进行访问。甚至在源代码中也指出了这一点。/public
send(req, path)
.on('directory', () => {
// We don't allow directories to be read.
const err: any = new Error('No directory access')
err.code = 'ENOENT'
reject(err)
})
评论
process.env.VARIABLE