Может ли event.requestContext.identity.cognitoIdentityId быть подделан? - PullRequest
0 голосов
/ 08 июня 2019

Я пытаюсь создать ACL, утверждая, что элемент в DynamoDB, поле UserId которого действительно является зарегистрированным, имеет значение event.requestContext.identity.cognitoIdentityId.

Но я боюсь, что его можно подделать так же, как HTTP-заголовки и т. Д.

У меня вопрос, это безопасно?

Ответы [ 2 ]

1 голос
/ 08 июня 2019

Нет, это не может быть подделано так же, как заголовки HTTP-запроса.Если запрос поступает через API-шлюз, как интеграция с Lambda-прокси, браузер не может сделать ничего, что позволило бы перезаписать эти значения, поскольку эта часть структуры событий Lambda создается API-шлюзом и не копируется из запроса.,Все, что введено в HTTP-запрос, появится в другом месте в структуре событий, а не здесь.(HTTP-запрос находится в event.input - который является родственным объектом event.requestContext - не родитель.)

Но опять же ... да, это может быть подделано в некоторых других сценариях неправильной конфигурации- если, например, ваша функция Lambda позволяет вызывать себя иначе, чем при развертывании вашего API-шлюза - тогда, конечно, вызывающий может создать целую структуру event, которая не имеет никакого отношения к любому HTTP-запросу, и вызвать вашу Lambdaработать с ним.Возможно, это слишком очевидно, чтобы упоминать, поскольку это неявно из того, как вы можете протестировать лямбда-функцию из консоли, но я упомяну это для тщательности.Отправьте поддельное тестовое событие в вашу функцию Lambda, используя функцию тестирования консоли Lambda, и, естественно, функция Lambda обрабатывает то, что вы ей отправили.

Итак, что неудивительно, с небрежными и чрезмерно широкими разрешениями, да, все возможно.... но используется как предназначено за API-шлюзом, как интеграция с Lambda Proxy, я бы сказал, нет.

0 голосов
/ 03 июля 2019

Я изучал этот вопрос в течение многих часов.

Я нашел эту запись , где автор извлекает userId из токена через:

const userId = await services.getUserIdFromToken(event.headers.Authorization);

Похоже, это более безопасный способ настройки userId, но все остальные примеры, которые я видел, используют event.requestContext.identity.cognitoIdentityId.

...