You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在AWS Cognito服务端阻止虚假用户域名(如yopmail)注册?

如何在AWS Cognito服务端阻止虚假邮箱域名注册

当然可以!客户端校验确实容易被绕过,而Cognito提供了服务端层面的可靠解决方案——Pre Sign-up Lambda Trigger,它在用户注册流程的早期触发,完全在AWS服务端执行,客户端根本没法干预。

下面是具体的实现步骤:

1. 创建Pre Sign-up Lambda函数

你需要编写一个Lambda函数,用来校验用户提交的邮箱域名是否在黑名单里。这里给你一个Node.js的示例代码:

exports.handler = async (event) => {
    // 定义要阻止的虚假域名列表,可以根据需求随时扩展
    const blockedDomains = new Set([
        'yopmail.com',
        'yopmail.net',
        'temp-mail.org',
        'dispostable.com'
    ]);

    // 提取用户邮箱并解析出域名部分
    const email = event.request.userAttributes.email;
    const domain = email.split('@')[1].toLowerCase();

    // 检查域名是否在黑名单中
    if (blockedDomains.has(domain)) {
        // 抛出错误直接终止注册流程,错误信息会返回给客户端
        throw new Error(`邮箱域名 ${domain} 不允许注册,请使用真实有效的邮箱地址。`);
    }

    // 校验通过,返回event对象让注册流程继续
    return event;
};

2. 将Lambda函数关联到你的Cognito用户池

  • 登录AWS控制台,找到你的目标Cognito用户池
  • 切换到触发器标签页
  • Pre sign-up的下拉选项里,选择你刚刚创建的Lambda函数
  • 点击保存配置,这样注册流程就会自动触发这个Lambda了

3. 测试验证

现在当用户尝试用黑名单里的域名注册时,Cognito会立刻触发Lambda函数校验,直接拒绝注册请求,客户端会收到你定义的错误提示,完全没法绕过这个校验。

额外优化提示

  • 如果需要动态更新黑名单,不用每次改Lambda代码,可以把域名列表存在DynamoDB或者Secrets Manager里,让Lambda去读取,这样更新更灵活
  • 要是需要匹配模糊域名(比如所有带yopmail的子域名),可以把判断逻辑改成正则表达式匹配,比如/yopmail\./.test(domain)
  • 记得给Lambda配置合适的权限:Cognito会自动创建调用Lambda的基础权限,但如果你的Lambda需要访问DynamoDB这类服务,得手动添加对应的访问权限

内容的提问来源于stack exchange,提问作者F_SO_K

火山引擎 最新活动