注册 Google Workspace 时,作者输入公司域名后,却收到“请输入有效域名,而不是邮箱服务商”的提示。域名本身没有任何滥用记录,Google 官方也无法解释原因。联系客服后,经历了换浏览器、换设备、录屏、提交工程师等流程,最终得到的建议竟然是“换一个域名”。更离谱的是,社区中还有其他正常域名遭遇同样问题,甚至包括乌克兰经济部使用的 me.gov.ua。
无奈之下,作者直接分析注册页面的前端 JavaScript,发现问题来自一个名为 DHa 的正则黑名单。代码会将用户输入的域名与大量规则逐一匹配,例如 gmail\..*、outlook\..*、web\..*、me\..*。其中 web\..* 意味着所有以 web. 开头的域名都会被命中,me\..* 则会把 me.gov.ua 这样的正常政府域名也判定为邮箱服务商。
代码同时维护了一份白名单 EHa,包括 att.com、sfr.com、terra.co、alice.app 等域名。也就是说,Google 实际采用的是“黑名单 + 人工例外”的模式:发现误伤后,就把特殊域名加入白名单。这种方式虽然简单,却容易不断积累补丁,最终形成越来越庞大的规则集合。
作者绕过前端校验后成功完成注册,说明这个错误至少来自客户端校验,服务端并没有实施完全相同的阻断。这个案例也说明,前端校验不应该成为真正的业务安全边界。
经验总结:
对于邮件平台而言,更合理的域名校验应该分层处理:
- 首先进行域名语法检查,确认格式合法;然后通过 DNS 判断域名是否存在,并根据 MX 等记录判断是否配置邮件服务;
- 如果业务需要限制公共邮箱,还应维护独立的公共邮箱域名数据库,使用
gmail.com、outlook.com等精确域名匹配,而不要轻易使用web\..*、me\..*这类宽泛规则; - 最后,如果需要确认用户是否拥有域名,应通过 DNS TXT、验证邮件等方式完成所有权验证。
这个案例真正值得借鉴的经验是:不要把“域名是否合法”“是否提供邮件服务”“是否属于公共邮箱服务商”“是否归用户所有”混成一个判断。
每个问题都应该由独立的校验层负责,并提供可解释的错误原因,否则,一个简单的正则误判,就可能最终变成用户无法理解、客服无法定位、工程师难以排查的产品故障。
这里面的 195 个域名黑名单也可以作为参考:
gmail\..*hotmail\..*yahoo\..*myyahoo\.comoutlook\..*aol\..*inbox\..*fastmail\..*mail\..{1,3}(\..{2})?$rediffmail\..*lycos\..*att\..*comcast\.netverizon\..*talktalk\..*laposte\..*gmx\..*web\..*bk\..*yandex\..*rambler\..*pochta\..*live\..*cox\..*bellsouth\..*me\..*earthlink\..*sbcglobal\..*qq\..*ceznam\..*163\..*126\..*free\..*sfr\..*wanadoo\..*aruba\..*terra\..*btinternet\..*alice\..*libero\..*telenet\..*corp\.terra\.com\.comac\.comwebstarts\.comgooglemail\.commsn\.comteleworm\.comisbn10\.netisbn13\.netymail\.commailinator\.compookmail\.comtrashymail\.comdodgit\.comspambob\.comdotarai\.co\.thappspeople\.dkindiamart\.compkt\.plnaver\.comseznam\.czhemsida24\.seshaw\.cancs\.com\.sgrogers\.comrocketmail\.comukr\.netcharter\.netuol\.com\.brya\.rubigpond\.comidwebhost\.comvkios\.comregistar\.comcpasitesolutions\.comoptonline\.netiridiuminteractive\.comdata-typing-earns\.infosmartpillars\.comnate\.comlist\.ruo2\.plriaenjolie\.comii-ii-ii-ii\.comwp\.pltherapysites\.commef\.gob\.petheiconweb\.comhanmail\.netnordicweb\.comhavealook\.comig\.com\.brskepy\.comnameisp\.comoptusnet\.com\.aucreativemotiondesignnifty\.comntlworld\.competamatic\.comtelus\.netmsa\.hinet\.netsympatico\.cabojanowski\.plbing\.comzlatestranky\.czxtra\.co\.nzsina\.combluewin\.chbol\.com\.brcentrum\.czmindspring\.comjuno\.comyourha\.comphotobiz\.comaim\.comvideotron\.cablueyonder\.co\.ukemail\.cztiscali\.ittiscali\.co\.ukhosting\.com\.pein\.comteamunify\.comsky\.comidium\.nofamily-address\.rupelsoftlabs\.inpobox\.comsakaryarehberim\.comemail\.comiinet\.net\.auwebsites\.caglobo\.comcode49\.netxs4all\.nlwindowslive\.comusa\.netwebtel\.inbigpond\.net\.auvip\.qq\.comroadrunner\.compacbell\.netsohu\.comusa\.comi\.uaembarqmail\.combatesville\.comgobiernoenlinea\.gov\..*foxmail\.cominternode\.on\.netabv\.bgparan\.comt-online\.decfl\.rr\.com139\.comicloud\.comnewmail\.runightmail\.runm\.rupop3\.rurbcmail\.rusmtp\.ruhushmail\.comaliceadsl\.frarcor\.decenturytel\.netchello\.nlclub-internet\.frfacebook\.comfreenet\.defrontiernet\.nethetnet\.nlhome\.nlneuf\.frorange\.frplanet\.nlskynet\.betin\.itvirgilio\.itvoila\.frwindstream\.netyahoogroups\.comzonnet\.nlproton\.meprotonmail\.comprotonmail\.chpm\.me.*\.ocn\.ne\.jpocn\.ne\.jp.*\.plala\.or\.jpplala\.or\.jp.*\.biglobe\.ne\.jpbiglobe\.ne\.jp.*\.so-net\.ne\.jpso-net\.ne\.jp
大致可以分成 8 类:
- 公共邮箱服务:Gmail、Outlook、Yahoo、Proton 等面向公众提供邮箱服务的平台。
- 电信运营商邮箱:
comcast.net、verizon.*、t-online.de等由电信运营商向用户提供的邮箱服务。 - 地区性邮箱服务商:QQ、网易、Naver、Seznam 等不同国家和地区的本土邮箱服务。
- 临时/一次性邮箱:Mailinator、Pookmail、Trashymail 等用于临时注册、匿名收信的邮箱服务。
- 邮箱品牌及历史域名:
googlemail.com、ymail.com、rocketmail.com、windowslive.com等邮箱品牌、别名或历史域名。 - 邮件及网站相关服务:邮件托管、网站托管、建站服务等,例如
mail\..*、web\..*、hosting.com.pe。 - 知名网络服务:
facebook.com、bing.com等本身并非邮箱服务商,但被纳入了这份黑名单。 - 历史业务规则及特殊条目:因历史业务需求、滥用记录、人工判断或过往误判而加入的域名,部分条目的具体来源已经难以从代码中确认。