繁体   English   中英

如何隐藏 nextjs api 路由,使其无法通过 url 直接访问?

[英]how to hide nextjs api routes from being directly accessible through url?

next.js API routes 通过URL访问时隐藏路由响应数据有什么办法吗? 我想隐藏路线,因为有些数据我不想让用户直接访问。

没有办法在 nextjs 中隐藏用户通过 url 的 API 路由。 实际上,当您托管网站时,nextjs API 路由对任何人都是公开可用的,而无需从外部文件夹导出和托管。 我结束了使用 node express 制作服务器端路由,然后在 nextjs 中连接到前端。

保护API 路由的快速简单的方法可能是通过无状态的 session 管理库,例如具有保存/创建销毁端点的iron-session以验证和使Next JS Z8A5DA52ED126447D359E70C0572 路由无效

试试 Vercel 的github 示例 这可能是一个很好的起点。

请记住:始终使用最佳身份验证机制来保护任何具有适当权限的直接 api 路由调用。

隐藏 API 条路线是非常不值得的。 为了保护 API 中的基本数据..有 CORS 和身份验证方法可以防止嘈杂的不需要的流量我在这个上找到了精彩的博客

https://dev.to/a7u/how-to-protect-nextjs-api-routes-from-other-browsers-3838

您可以设置授权 header,每次用户访问 API 时检查授权密钥,这样普通用户将无法在不知道授权密钥的情况下访问该页面

在 Next.js 版本 13 中,您可以使用中间件阻止用户通过检查 req.referer 直接检查您的 api 的路由,然后只有您的应用程序可以调用您的应用程序的 api。 授权令牌也可以在中间件内部使用。

https://nextjs.org/blog/next-13-1#nextjs-advanced-middleware

import { NextResponse } from 'next/server'

import type { NextRequest } from 'next/server'

export function middleware(req: NextRequest) {

    const url = req.nextUrl
    const { pathname } = url

    if (pathname.startsWith(`/api/`)) {
        if (!req.headers.get("referer")?.includes(process.env.APP_URL as string)) {
        return NextResponse.json({ message: 'Unauthorized' }, { status: 401 });
        }
      }

     return NextResponse.next()

}

export const config = {
  matcher: ['/((?!_next|fonts|examples|svg|[\\w-]+\\.\\w+).*)'],
}

process.env.APP_URL 是您应用的 url 例如:http://localhost:3000

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM