Google Workspace 的域名校验:一个正则黑名单引发的误伤

注册 Google Workspace 时,作者输入公司域名后,却收到“请输入有效域名,而不是邮箱服务商”的提示。域名本身没有任何滥用记录,Google 官方也无法解释原因。联系客服后,经历了换浏览器、换设备、录屏、提交工程师等流程,最终得到的建议竟然是“换一个域名”。更离谱的是,社区中还有其他正常域名遭遇同样问题,甚至包括乌克兰经济部使用的 me.gov.ua

无奈之下,作者直接分析注册页面的前端 JavaScript,发现问题来自一个名为 DHa 的正则黑名单。代码会将用户输入的域名与大量规则逐一匹配,例如 gmail\..*outlook\..*web\..*me\..*。其中 web\..* 意味着所有以 web. 开头的域名都会被命中,me\..* 则会把 me.gov.ua 这样的正常政府域名也判定为邮箱服务商。

代码同时维护了一份白名单 EHa,包括 att.comsfr.comterra.coalice.app 等域名。也就是说,Google 实际采用的是“黑名单 + 人工例外”的模式:发现误伤后,就把特殊域名加入白名单。这种方式虽然简单,却容易不断积累补丁,最终形成越来越庞大的规则集合。

作者绕过前端校验后成功完成注册,说明这个错误至少来自客户端校验,服务端并没有实施完全相同的阻断。这个案例也说明,前端校验不应该成为真正的业务安全边界。

经验总结

对于邮件平台而言,更合理的域名校验应该分层处理:

  1. 首先进行域名语法检查,确认格式合法;然后通过 DNS 判断域名是否存在,并根据 MX 等记录判断是否配置邮件服务;
  2. 如果业务需要限制公共邮箱,还应维护独立的公共邮箱域名数据库,使用 gmail.comoutlook.com 等精确域名匹配,而不要轻易使用 web\..*me\..* 这类宽泛规则;
  3. 最后,如果需要确认用户是否拥有域名,应通过 DNS TXT、验证邮件等方式完成所有权验证。

这个案例真正值得借鉴的经验是:不要把“域名是否合法”“是否提供邮件服务”“是否属于公共邮箱服务商”“是否归用户所有”混成一个判断
每个问题都应该由独立的校验层负责,并提供可解释的错误原因,否则,一个简单的正则误判,就可能最终变成用户无法理解、客服无法定位、工程师难以排查的产品故障。

这里面的 195 个域名黑名单也可以作为参考:

  1. gmail\..*
  2. hotmail\..*
  3. yahoo\..*
  4. myyahoo\.com
  5. outlook\..*
  6. aol\..*
  7. inbox\..*
  8. fastmail\..*
  9. mail\..{1,3}(\..{2})?$
  10. rediffmail\..*
  11. lycos\..*
  12. att\..*
  13. comcast\.net
  14. verizon\..*
  15. talktalk\..*
  16. laposte\..*
  17. gmx\..*
  18. web\..*
  19. bk\..*
  20. yandex\..*
  21. rambler\..*
  22. pochta\..*
  23. live\..*
  24. cox\..*
  25. bellsouth\..*
  26. me\..*
  27. earthlink\..*
  28. sbcglobal\..*
  29. qq\..*
  30. ceznam\..*
  31. 163\..*
  32. 126\..*
  33. free\..*
  34. sfr\..*
  35. wanadoo\..*
  36. aruba\..*
  37. terra\..*
  38. btinternet\..*
  39. alice\..*
  40. libero\..*
  41. telenet\..*
  42. corp\.terra\.com\.co
  43. mac\.com
  44. webstarts\.com
  45. googlemail\.com
  46. msn\.com
  47. teleworm\.com
  48. isbn10\.net
  49. isbn13\.net
  50. ymail\.com
  51. mailinator\.com
  52. pookmail\.com
  53. trashymail\.com
  54. dodgit\.com
  55. spambob\.com
  56. dotarai\.co\.th
  57. appspeople\.dk
  58. indiamart\.com
  59. pkt\.pl
  60. naver\.com
  61. seznam\.cz
  62. hemsida24\.se
  63. shaw\.ca
  64. ncs\.com\.sg
  65. rogers\.com
  66. rocketmail\.com
  67. ukr\.net
  68. charter\.net
  69. uol\.com\.br
  70. ya\.ru
  71. bigpond\.com
  72. idwebhost\.com
  73. vkios\.com
  74. registar\.com
  75. cpasitesolutions\.com
  76. optonline\.net
  77. iridiuminteractive\.com
  78. data-typing-earns\.info
  79. smartpillars\.com
  80. nate\.com
  81. list\.ru
  82. o2\.pl
  83. riaenjolie\.com
  84. ii-ii-ii-ii\.com
  85. wp\.pl
  86. therapysites\.com
  87. mef\.gob\.pe
  88. theiconweb\.com
  89. hanmail\.net
  90. nordicweb\.com
  91. havealook\.com
  92. ig\.com\.br
  93. skepy\.com
  94. nameisp\.com
  95. optusnet\.com\.au
  96. creativemotiondesign
  97. nifty\.com
  98. ntlworld\.com
  99. petamatic\.com
  100. telus\.net
  101. msa\.hinet\.net
  102. sympatico\.ca
  103. bojanowski\.pl
  104. bing\.com
  105. zlatestranky\.cz
  106. xtra\.co\.nz
  107. sina\.com
  108. bluewin\.ch
  109. bol\.com\.br
  110. centrum\.cz
  111. mindspring\.com
  112. juno\.com
  113. yourha\.com
  114. photobiz\.com
  115. aim\.com
  116. videotron\.ca
  117. blueyonder\.co\.uk
  118. email\.cz
  119. tiscali\.it
  120. tiscali\.co\.uk
  121. hosting\.com\.pe
  122. in\.com
  123. teamunify\.com
  124. sky\.com
  125. idium\.no
  126. family-address\.ru
  127. pelsoftlabs\.in
  128. pobox\.com
  129. sakaryarehberim\.com
  130. email\.com
  131. iinet\.net\.au
  132. websites\.ca
  133. globo\.com
  134. code49\.net
  135. xs4all\.nl
  136. windowslive\.com
  137. usa\.net
  138. webtel\.in
  139. bigpond\.net\.au
  140. vip\.qq\.com
  141. roadrunner\.com
  142. pacbell\.net
  143. sohu\.com
  144. usa\.com
  145. i\.ua
  146. embarqmail\.com
  147. batesville\.com
  148. gobiernoenlinea\.gov\..*
  149. foxmail\.com
  150. internode\.on\.net
  151. abv\.bg
  152. paran\.com
  153. t-online\.de
  154. cfl\.rr\.com
  155. 139\.com
  156. icloud\.com
  157. newmail\.ru
  158. nightmail\.ru
  159. nm\.ru
  160. pop3\.ru
  161. rbcmail\.ru
  162. smtp\.ru
  163. hushmail\.com
  164. aliceadsl\.fr
  165. arcor\.de
  166. centurytel\.net
  167. chello\.nl
  168. club-internet\.fr
  169. facebook\.com
  170. freenet\.de
  171. frontiernet\.net
  172. hetnet\.nl
  173. home\.nl
  174. neuf\.fr
  175. orange\.fr
  176. planet\.nl
  177. skynet\.be
  178. tin\.it
  179. virgilio\.it
  180. voila\.fr
  181. windstream\.net
  182. yahoogroups\.com
  183. zonnet\.nl
  184. proton\.me
  185. protonmail\.com
  186. protonmail\.ch
  187. pm\.me
  188. .*\.ocn\.ne\.jp
  189. ocn\.ne\.jp
  190. .*\.plala\.or\.jp
  191. plala\.or\.jp
  192. .*\.biglobe\.ne\.jp
  193. biglobe\.ne\.jp
  194. .*\.so-net\.ne\.jp
  195. so-net\.ne\.jp

大致可以分成 8 类:

  1. 公共邮箱服务:Gmail、Outlook、Yahoo、Proton 等面向公众提供邮箱服务的平台。
  2. 电信运营商邮箱comcast.netverizon.*t-online.de 等由电信运营商向用户提供的邮箱服务。
  3. 地区性邮箱服务商:QQ、网易、Naver、Seznam 等不同国家和地区的本土邮箱服务。
  4. 临时/一次性邮箱:Mailinator、Pookmail、Trashymail 等用于临时注册、匿名收信的邮箱服务。
  5. 邮箱品牌及历史域名googlemail.comymail.comrocketmail.comwindowslive.com 等邮箱品牌、别名或历史域名。
  6. 邮件及网站相关服务:邮件托管、网站托管、建站服务等,例如 mail\..*web\..*hosting.com.pe
  7. 知名网络服务facebook.combing.com 等本身并非邮箱服务商,但被纳入了这份黑名单。
  8. 历史业务规则及特殊条目:因历史业务需求、滥用记录、人工判断或过往误判而加入的域名,部分条目的具体来源已经难以从代码中确认。
如果你有魔法,你可以看到一个评论框~