PHP函数checkdnsrr()的优缺点

时间:2018-10-15 07:04:14

标签: php

我目前正在阅读HEAD FIRST PHP和MySQL。我正在教如何验证电子邮件这一章。本书教您使用正则表达式检查电子邮件的本地名称部分,并使用PHP的内置函数checkdnsrr检查域部分。 如果域有效,则电子邮件将有效,反之亦然。

我刚刚尝试了Apple和GitHub的注册验证,发现他们没有以这种方式验证电子邮件字段。 我想知道这是否可行? 我个人认为这是一个好方法,但是,如果是这样,为什么像Apple这样的大公司不使用它呢?

很高兴听到您的不同看法。

1 个答案:

答案 0 :(得分:2)

验证电子邮件地址有很多问题:

  • 指定组成有效地址的RFC非常复杂,部分矛盾,并且彼此取代,因此,实际上编写既过高验证又未过验证的代码是在脖子上的巨大痛苦和不可行之间的某个地方。
  • 即使您根据规范完美地验证了地址,并且检查了域是否存在,您仍然不知道该地址是实际存在还是正在使用。唯一了解这种情况的方法是尝试向其发送电子邮件,然后查看邮件是否退回。那么,为什么要先处理所有其他麻烦,除了进行一些非常粗糙的优先过滤?
  • 实施过于精确的验证需要做更多的工作。
  • 通过启动与该DNS或SMTP服务器的网络连接来尝试验证域或实际地址,可以用作DDoS攻击媒介。在肯定拥有服务器资源的Apple的规模下,攻击者可以使Apple本质上具有大量伪造的电子邮件验证请求的DDoS较小域。

鉴于上述所有情况,使用.+@.+\..+这样的非常简单的检查来清除明显缺乏输入的信息,然后实际尝试发送电子邮件通常在实践中就足够了,并且可以避免误判,复杂的实现方式和过多的网络流量。