Next.JS 目录结构和 JSON 机密的安全性

Next.JS security of directory structure and JSON secrets

我有一个关于访问 Next.JS 目录及其访问要求的安全问题。
我有一个根文件夹,里面有我的页面、public、src、样式、模型文件夹。

在 src 文件夹中我有一个 settings.json 文件,它是一个空的 JavaScript 对象。这个想法是将设置添加到此文件并通过 api 路由访问,以检查可以在此 settings.json 文件上修改的设置...
我想知道的是,如果客户端实际上可以以某种方式只 read/access src 目录并获取 settings.json 文件。
我想把密钥放在这里,这样我就可以轻松更改密钥而无需重新启动服务器。所以我可以直接更新密钥,并将其应用于 settings.json 文件。然后更新将立即生效,我不必更改环境变量并重新启动服务器。
在 src 目录中保留和使用 json 文件来存储机密数据是否安全?如果没有,有没有办法为此目的保留和使用 json 文件? 感谢您的帮助和信息。

正如 juliomalves 所指出的,客户端代码将无法访问您在服务器上的目录或文件,public 目录除外。

Next 使您能够按照记录 here

提供来自 [root]/public 的静态资产

Note: Only assets that are in the public directory at build time will be served by Next.js.

如果此目录重命名,这些资产将不再可从客户端获得。

Note: Don't name the public directory anything else. The name cannot be changed and is the only directory used to serve static assets.

“我在那个 .env 文件旁边放了一个 settings.json 文件,并在 api 路由中需要它,客户端可以以某种方式下载那个 settings.json 文件而我故意发送他们 contents/file 本身?

可以从 api 路由提供信息的方式是明确创建一个路由来调用 res[ponse].send()(或 res.json() ) 以及从该文件导入的数据。 Api 路由从未在客户端捆绑,仅存在于服务器上,如前所述 here

Any file inside the folder pages/api is mapped to /api/* and will be treated as an API endpoint instead of a page. They are server-side only bundles and won't increase your client-side bundle size.

“我想知道的是,客户端是否真的可以通过某种方式 read/access src 目录并获取 settings.json 文件。”

如上所述,只有 /public 目录中的资产可以作为文件通过路径访问。目录在 Next 中永远不能作为静态资产访问。 source code.

甚至指出了这一点
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)
  })