Executando verificação de segurança...
1

[Dúvida] Vercel Rate Limit

Recentemente adicionei um rate limit (usando upstash e redis) a minha aplicação next js que está hosteada na Vercel. Também adicionei um sistema de ban automático dependendo de quando o limit do rate limit for atingido (usando a VK storage da vercel para armazenar os IPs banidos). Porém enquanto tava fazendo os testes, percebi que havia uma diferença quando o request era diretamente feito por um IP de uma pessoa e quando era feito pelo servidor (ex: getServerSideProps). Dei uma pesquisada pra como descobrir o IP da minha aplicação hosteada na vercel, mas descobri que ela sempre está mudando, por ser serverless. Então gostaria de perguntar aqui se há alguma maneira de diferenciar um request vindo da minha própria aplicação de um request vindo de um IP normal no middleware.js .

Carregando publicação patrocinada...
1

Usar uma configuração de ambiente: Você pode definir uma variável de ambiente específica para a Vercel que permite que sua aplicação Next.js saiba que a solicitação está vindo da própria aplicação. Por exemplo, você pode definir uma variável de ambiente chamada "VERCEL_INTERNAL_REQUEST" com um valor específico, como "true", e verificar essa variável em seu middleware.js.

1

Me desculpe a pergunta, mas você poderia detalhar um pouco mais? porque ficou um pouco confuso para mim como que usar dessa forma iria diferenciar um request recebido de argumento da edge function middleware(request).

1

No seu arquivo middleware.js, você pode verificar a presença dessa variável de ambiente para diferenciar as solicitações:

async function middleware(request) {
  const isInternalRequest = process.env.VERCEL_INTERNAL_REQUEST === 'true';

  if (isInternalRequest) {
    // É uma solicitação interna da aplicação
    // Faça algo aqui
  } else {
    // É uma solicitação externa de um IP normal
    // Faça algo aqui
  }

  // Continue o processamento do middleware
}
1
1