Oba*_*bay 2 regex email email-address
在我们的在线商店中,我们遇到了一个问题,其中某个用户因"无效的电子邮件地址"而无法购买.它看起来像这样:
her.email.address.@docomo.ne.jp
我认为引发无效电子邮件错误的是电子邮件本地部分的尾随点.在代码中,我注释掉了第二个条件:
if (isc_substr($local, 0, 1) == '.' || isc_substr($local, -1, 1) == '.')
使它工作.这样安全吗?或者我们应该建议客户更改她的电子邮件地址?
scy*_*scy 10
该电子邮件地址确实违反了标准(RFC 5322),我建议用户更改其地址.但是,当您允许本地零件以点结尾时,不应存在任何安全隐患.
该标准也不允许两个或多个连续点,这种限制可能更安全相关:想想类似的东西../../.是的,在电子邮件地址中允许使用斜杠,而没有为此准备的代码可能会对本地部分做一些讨厌的事情.机会很低,但是,你知道,我已经看到了......;)
由于标准有点难以阅读,所以它的内容如下:
RFC 5322允许具有本地部分点,但是,有两个重要的限制:不允许两个或多个连续的点,它也确实没有让本地部分开始或以点结束.
第3.4.1节描述了local-part它可能具有的三种语法."通常"的是dot-atom语法,它基本上在3.2.3节中定义为
dot-atom-text = 1*atext *("." 1*atext)
Run Code Online (Sandbox Code Playgroud)
哪些atext是可打印的US-ASCII字符,但有一些例外:
atext = ALPHA / DIGIT / ; Printable US-ASCII
"!" / "#" / ; characters not including
"$" / "%" / ; specials. Used for atoms.
"&" / "'" /
"*" / "+" /
"-" / "/" /
"=" / "?" /
"^" / "_" /
"`" / "{" /
"|" / "}" /
"~"
Run Code Online (Sandbox Code Playgroud)
所以dot-atom-text基本上定义为"至少一个atext字符,然后是[一个点后跟一个或多个atext字符] 零或更多次出现".这意味着abc也没关系a.bc.d,但.abc不是(因为它不是以它开头atext),也不是a..b(因为没有atext跟随第一个点)或abc.(因为没有atext跟随).
正如我上面所说,你可以选择忽略这些限制(虽然我建议不要允许连续的点),但基本上你的购物车软件是完全正确的禁止该电子邮件地址.
| 归档时间: |
|
| 查看次数: |
2382 次 |
| 最近记录: |