वर्डप्रेस और PHP कोर
is_email()
समारोह स्रोत एक विशिष्ट वर्डप्रेस कार्यान्वयन है और क्या साथ पूरी तरह से काम नहीं करता है आरएफसी 6531 अनुमति देता है। एक कारण यह हो सकता है, कि इंटरनेट इंजीनियरिंग टास्क फोर्स (IETF®) के दिशानिर्देशों के अनुसार डिफ़ॉल्ट PHP FILTER_VALIDATE_EMAIL
स्थिरांक filter_var()
कुछ बेहतर करने के लिए बेहतर नहीं है ।
मानक
बिंदु यह है कि RFC 6531 "ASCII रेंज से परे यूनिकोड वर्ण" की अनुमति देता है । अर्थात् वे (स्थानीय भाग के लिए @
) से पहले हैं :
- अपरकेस और अंग्रेजी अक्षरों को कम करना (a-z, A-Z) (ASCII: 65-90, 97-122)
- अंक
0
के लिए 9
(ASCII: 48-57)
- ये खास पात्र:
! # $ % & ' * + - / = ? ^ _ ` { | } ~
- चरित्र
.
(डॉट, अवधि, पूर्ण विराम) (ASCII: 46) बशर्ते कि यह पहला या अंतिम चरित्र नहीं है, और यह भी प्रदान किया जाता है कि यह लगातार दिखाई John..Doe@example.com
नहीं देता है (उदाहरण की अनुमति नहीं है)।
- प्रतिबंधों के साथ विशेष पात्रों की अनुमति है। वो हैं:
- अंतरिक्ष और
"(),:;<>@[\]
(ASCII: 32, 34, 40, 41, 44, 58, 59, 60, 62, 64, 91-93)
- विशेष वर्णों के लिए प्रतिबंध यह है कि उनका उपयोग केवल उद्धरण चिह्नों के बीच होने पर ही किया जाना चाहिए, और उनमें से 2 (बैकस्लैश \ _ और उद्धरण चिह्न "(ASCII: 92, 34)) भी बैकस्लैश
\
(जैसे "\\"
और "\""
) से पहले होना चाहिए ।
- स्थानीय भाग के किसी भी छोर पर कोष्ठक के साथ टिप्पणियों की अनुमति है; जैसे
john.smith(comment)@example.com
और (comment)john.smith@example.com
दोनों समान हैं "john.smith@example.com"
, लेकिन john.(comment)smith@example.com
अमान्य होगा।
- उपरोक्त अंतर्राष्ट्रीय वर्ण
U+007F
, UTF-8 के रूप में एन्कोडेड हैं, RFC 6531 द्वारा अनुमति दी जाती है, हालांकि मेल सिस्टम स्थानीय वर्णों को निर्दिष्ट करते समय किन वर्णों का उपयोग करने के लिए प्रतिबंधित कर सकता है।
और वैश्विक / डोमेन भाग के लिए:
ईमेल पते के डोमेन नाम के हिस्से को सख्त दिशानिर्देशों के अनुरूप होना चाहिए: यह एक होस्टनाम के लिए आवश्यकताओं से मेल खाना चाहिए, जिसमें अक्षर, अंक, हाइफ़न और डॉट्स शामिल हैं। इसके अलावा, डोमेन भाग एक आईपी पता शाब्दिक, जैसे वर्ग कोष्ठकों से घिरा हुआ हो सकता है jsmith@[192.168.2.1]
या jsmith@[IPv6:2001:db8::1]
[...]
स्रोत: विकिपीडिया
क्या वैध है?
इससे निम्नलिखित जैसे अजीब, लेकिन मान्य ई-मेल पते हो सकते हैं:
localpart.ending.with.dot.@example.com
(comment)localpart@example.com
"this is v@lid!"@example.com
"much.more unusual"@example.com
postbox@com
admin@mailserver1
"()<>[]:,;\\@\"\\\\!#$%&\'*+-/=?^_`{}| ~.a"@example.org
" "@example.org
स्रोत: php.net / लेखक gt@kani.hu - इस पोस्ट के लेखक द्वारा निर्धारित उदाहरण
सीमाएं
स्थानीय और डोमेन लंबाई सीमाएँ भी हैं:
ईमेल पतों का प्रारूप वह स्थान है local-part@domain
जहाँ स्थानीय-भाग 64 वर्णों तक लंबा हो सकता है और डोमेन नाम में अधिकतम 253 वर्ण हो सकते हैं - लेकिन आगे या पीछे के मार्ग की अधिकतम 256-वर्ण लंबाई संपूर्ण ईमेल पते को प्रतिबंधित करती है हो कोई और अधिक से अधिक 254 वर्ण लंबा । [2] औपचारिक परिभाषा RFC 5322 में हैं (वर्गों 3.2.3 और 3.4.1) और आरएफसी 5321 - सूचना के आरएफसी 3696 [3] और संबद्ध शुद्धिपत्र में दी गई एक और अधिक पठनीय रूप के साथ ।
स्रोत: विकिपीडिया
वर्डप्रेस प्रतिबंध
और यही वर्डप्रेस चेक के लिए है:
- ईमेल की न्यूनतम लंबाई के लिए टेस्ट हो सकता है:
strlen( $email ) < 3
- पहली स्थिति के बाद एक @ चरित्र के लिए परीक्षण करें:
strpos( $email, '@', 1 ) === false
- अमान्य वर्णों का परीक्षण:
!preg_match( '/^[a-zA-Z0-9!#$%&\'*+\/=?^_`{|}~\.-]+$/', $local )
- अवधि के अनुक्रम के लिए टेस्ट:
preg_match( '/\.{2,}/', $domain )
- अग्रणी और अनुगामी अवधि और व्हाट्सएप के लिए टेस्ट:
trim( $domain, " \t\n\r\0\x0B." ) !== $domain
- मान लें कि डोमेन में कम से कम दो उप-होंगे:
$subs = explode( '.', $domain );
और फिर
2 > count( $subs )
trim( $sub, " \t\n\r\0\x0B-" ) !== $sub
!preg_match('/^[a-z0-9-]+$/i', $sub )
स्रोत: WP कोर v4.0
फिल्टर और कस्टम सत्यापन
उपर्युक्त सभी मामले is_email()
झूठे वापस करने के लिए ट्रिगर होंगे । परिणाम फ़िल्टर-सक्षम (एक कॉलबैक संलग्न किया जा सकता है) और फ़िल्टर में तीन तर्क होंगे, जहां अंतिम तर्क कारण है। उदाहरण:
return apply_filters( 'is_email', false, $email, 'sub_hyphen_limits' );
जिसका अर्थ है कि आप विशिष्ट चेक द्वारा लौटे परिणामों को ओवरराइड कर सकते हैं।
यह आपको विशेष चेक जोड़ने की अनुमति देता है, उदाहरण के लिए, उमलौट-डोमेन, टीएलडी-ओनली डोमेन पार्ट्स, आदि की अनुमति देने के लिए।
निष्कर्ष
वर्डप्रेस अधिकांश मामलों के लिए सुरक्षित है, लेकिन मेल सर्वर के रूप में अधिक प्रतिबंधक वास्तव में आरएफसी के अनुरूप होना चाहिए। ध्यान रखें कि प्रत्येक मेल सर्वर RF 6531 दिशानिर्देशों के साथ संरेखित नहीं होगा।
संपादित करें
मजेदार साइडफैक्ट: अंदर दो संबंधित कार्य हैं ~/wp-includes/formatting
: is_email()
और sanitize_email()
। वे व्यावहारिक रूप से एक ही कार्य हैं। मुझे नहीं पता कि किसी ने यह क्यों तय किया कि फ़ंक्शन सामग्री को एक से दूसरे में कॉपी करने के बजाय केवल एक को दूसरे को कॉलबैक के रूप में जोड़ने के बजाय दूसरे प्रदान करता है। के रूप में v0.71 के बाद से और v1.5 के बाद से ही कर रहे हैं, मैं व्यक्तिगत रूप से बाद में उपयोग के रूप में आप एक साफ स्ट्रिंग मिलेगा। ध्यान दें कि यहां तक कि यह भी कहा जाता है कि यह RFC अनुरूप नहीं हैis_email()
sanitize_email()
is_email()