diff --git a/src/utils/request.ts b/src/utils/request.ts index f97c790b..6f033a51 100644 --- a/src/utils/request.ts +++ b/src/utils/request.ts @@ -207,9 +207,11 @@ export function getRequestIP( } if (opts.xForwardedFor) { + // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For#syntax const xForwardedFor = getRequestHeader(event, "x-forwarded-for") ?.split(",") - ?.pop(); + .shift() + ?.trim(); if (xForwardedFor) { return xForwardedFor; } diff --git a/test/utils.test.ts b/test/utils.test.ts index 15289069..5eb61402 100644 --- a/test/utils.test.ts +++ b/test/utils.test.ts @@ -186,6 +186,19 @@ describe("", () => { req.set("x-forwarded-for", "2001:0db8:85a3:0000:0000:8a2e:0370:7334"); expect((await req).text).toBe("2001:0db8:85a3:0000:0000:8a2e:0370:7334"); }); + it("multiple ips", async () => { + app.use( + "/", + eventHandler((event) => { + return getRequestIP(event, { + xForwardedFor: true, + }); + }), + ); + const req = request.get("/"); + req.set("x-forwarded-for", "client , proxy1, proxy2"); + expect((await req).text).toBe("client"); + }); }); describe("getRequestFingerprint", () => {