我的服务器组件由于某种原因最终出现在客户端

问题描述 投票:0回答:1

即使我在服务器文件上使用了“使用服务器”指令,该文件不知何故最终出现在应用程序的客户端,也就是说,它显示在浏览器中。

"use server";
import { productListSorter } from "@/util/utility";
import oracledb from "oracledb";

let connect = await oracledb.getConnection({
  user: "student",
  password: "studentpassword",
  connectString: "localhost:1521/XEPDB1",
});

export const getAllProducts = async () => {
  const products = await connect.execute(`SELECT * FROM products`);

  return productListSorter(products.rows);
};

我原以为它不会出现在客户端,但它确实这样做了,因此暴露了我的数据库凭据

next.js react-server-components
1个回答
0
投票

服务器组件在服务器中呈现,其结果会传输到浏览器,但您的服务器组件代码不存在于客户端捆绑包中,因此您的凭据是安全的。

这篇博客文章指出:

服务器组件 (RSC) 在与客户端组件不同的模块系统中执行,以避免意外暴露两个模块之间的信息。

还有在文档中

安全性:服务器组件允许您在服务器上保留敏感数据和逻辑,例如令牌和 API 密钥,而不存在将它们暴露给客户端的风险。

但是建议使用DAL:

我们为新项目推荐的方法是在 JavaScript 代码库中创建一个单独的数据访问层,并在其中整合所有数据访问。这种方法可确保一致的数据访问并减少发生授权错误的机会。

另一种方法是将数据库查询直接放入服务器组件中。这种方法仅适用于快速迭代和原型设计。例如。对于一个小团队的小产品,每个人都意识到风险以及如何监视风险。

关于 RSC 的第三方博客文章

增强安全性:RSC 中使用的身份验证令牌或 API 密钥等敏感数据在服务器上执行,永远不会暴露给浏览器,从而防止意外泄露

© www.soinside.com 2019 - 2024. All rights reserved.