Skip to content

Commit c49fdb8

Browse files
committed
Fix handling of x-forwarded-for header
1 parent 084d28e commit c49fdb8

File tree

2 files changed

+6
-7
lines changed

2 files changed

+6
-7
lines changed

src/eventToRequestOptions.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,26 +20,25 @@ const getValuesFromStringAndMultiString = (stringMap: StringMap<string> | null |
2020
const eventToRequestOptions = (event: APIGatewayEvent, ctx?: LambdaContext): InProcessRequestOptions => {
2121
let remoteAddress:string | undefined = undefined;
2222
let ssl = false;
23+
const queryStringParams = getValuesFromStringAndMultiString(event.queryStringParameters, event.multiValueQueryStringParameters);
2324
const headers = getValuesFromStringAndMultiString(event.headers, event.multiValueHeaders);
2425
if (ctx) {
2526
headers['x-aws-lambda-request-id'] = ctx.awsRequestId;
2627
}
27-
const queryStringParams = getValuesFromStringAndMultiString(event.queryStringParameters, event.multiValueQueryStringParameters);
2828
if (event.requestContext && event.requestContext.elb) {
2929
//load balancer request - it has the client ip in x-forwarded-for header
3030
if (typeof headers['x-forwarded-for'] === 'string') {
31-
const ips = (headers['x-forwarded-for'] as string).split(' ');
32-
remoteAddress = ips[ips.length - 1];
33-
ips.splice(-1, 1)
34-
headers['x-forwarded-for'] = ips.join(' ');
31+
const ips = headers['x-forwarded-for'].split(',').map(ip => ip.trim());
32+
remoteAddress = ips.splice(-1, 1)[0]
33+
headers['x-forwarded-for'] = ips.join(', ');
3534
ssl = headers['x-forwarded-proto'] === 'https';
3635
if (ips.length === 0) {
3736
delete headers['x-forwarded-for'];
3837
delete headers['x-forwarded-port'];
3938
delete headers['x-forwarded-proto'];
4039
}
4140
}
42-
//elb also doesn't uri decode query string params
41+
//elb doesn't uri decode query string params
4342
Object.keys(queryStringParams).forEach(k => {
4443
queryStringParams[k] = decodeURIComponent(queryStringParams[k])
4544
})

test/eventToRequestOptions.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ describe('eventToRequestOptions', () => {
9494
httpMethod: 'HEAD',
9595
body: null,
9696
headers: {
97-
"x-forwarded-for": "10.10.2.3 129.45.45.48",
97+
"x-forwarded-for": "10.10.2.3, 129.45.45.48",
9898
"x-forwarded-proto": "http",
9999
},
100100
queryStringParameters: {},

0 commit comments

Comments
 (0)