NextJs 服务器操作的安全性如何?

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

有人可以解释一下服务器操作在幕后是如何工作的吗?在下面的示例中,我首先检查查看者是否有权访问该帐户,然后创建操作。这在浏览器中工作得很好。但是,如果有人伪造一个伪造“提交”调用的请求,会发生什么情况呢?我需要在操作中进行另一次检查吗?如果我在 Action 中添加另一个“if”,TypeScript 会告诉我该变量此时始终为 true,我无需担心它。这是真的还是 TypeScript 试图愚弄我? 文档说我们需要检查用户是否有权执行该操作,但示例位于组件之外。它在服务器组件中的工作方式相同吗?

async function DeleteUser({ targetUser }: Props) {
  const sessionUser = await getSessionUser();
  const viewerHasAccess = checkAccess(sessionUser, targetUser);
  if (!viewerHasAccess) return "403 forbidden";

  const submit = async () => {
    "use server";

    deleteUser(targetUser);
  };

  return (
    <form action={submit}>
      <input type="submit" value="Delete" />
    </form>
  );
}
security next.js react-server-components server-action
1个回答
0
投票

是的,您应该始终检查是否允许用户在其中执行服务器操作。

正如 Next.js 文档所说

您应该像对待面向公众的 API 端点一样对待服务器操作,并确保用户有权执行该操作。

在幕后,您的应用程序正在执行 POST 请求,以使用其参数和应用程序上下文调用您的

submit
操作。因此,您需要在执行任何操作之前验证请求。

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