Amazon web services event.requestContext.identity.CognitoIdentity是否可以被欺骗?
我试图通过断言DynamoDB中字段UserId为Amazon web services event.requestContext.identity.CognitoIdentity是否可以被欺骗?,amazon-web-services,amazon-cognito,acl,spoofing,Amazon Web Services,Amazon Cognito,Acl,Spoofing,我试图通过断言DynamoDB中字段UserId为event.requestContext.identity.cognitoIdentityId的项是否确实是登录的项来执行ACL 但是,我担心它会像HTTP头一样被欺骗 我的问题是,这安全吗?不,这不能像HTTP请求头那样被欺骗。如果请求通过API网关(作为Lambda代理集成)传入,那么浏览器将无法覆盖这些值,因为Lambda事件结构的这一部分是由API网关创建的,而不是从请求复制的。任何注入HTTP请求的内容都会出现在事件结构的其他地方,而不
event.requestContext.identity.cognitoIdentityId的项是否确实是登录的项来执行ACL
但是,我担心它会像HTTP头一样被欺骗
我的问题是,这安全吗?不,这不能像HTTP请求头那样被欺骗。如果请求通过API网关(作为Lambda代理集成)传入,那么浏览器将无法覆盖这些值,因为Lambda事件结构的这一部分是由API网关创建的,而不是从请求复制的。任何注入HTTP请求的内容都会出现在事件结构的其他地方,而不是这里。(HTTP请求位于event.input
——它是event.requestContext
的同级对象,而不是父对象。)
但话说回来。。。是的,这可能在某些其他错误配置场景中被欺骗——例如,您的Lambda函数允许自己被调用,而不是通过API网关部署进行调用——那么调用程序当然可以创建一个与任何HTTP请求无关的完整的事件结构,并使用它调用Lambda函数。这可能太明显了,不值得一提,因为从控制台测试Lambda函数的方式来看,这是隐式的,但我提到它是为了彻底。使用Lambda控制台的测试函数向Lambda函数发送伪造的测试事件,Lambda函数自然会处理您发送的内容
因此,毫不奇怪,由于粗心和过于宽泛的权限,是的,任何事情都是可能的。。。但是,作为Lambda代理集成,在API网关后面的意图,我会说no.我已经研究了很多小时了
我发现作者通过以下方式从令牌中提取用户ID
:
const userId = await services.getUserIdFromToken(event.headers.Authorization);
这似乎是处理设置userId的更安全的方法,但我看到的所有其他示例都使用event.requestContext.identity.cognitoIdentityId