2009-12-29 11 views
12

परिदृश्य:
मेरे पास मेरे वेब ऐप पर एक संपर्क फ़ॉर्म है, यह स्पैम का बहुत कुछ मिलता है।
मैं ईमेल पते के प्रारूप को कम कर रहा हूं iee ^[email protected]+\..+$
मैं स्पैम फ़िल्टरिंग सेवा (डिफेंसियो) का उपयोग कर रहा हूं लेकिन वापस आने वाले स्पैम स्कोर मान्य संदेशों के साथ ओवरलैपिंग कर रहे हैं। 0.4 की सीमा पर कुछ स्पैम हो जाते हैं और कुछ ग्राहक के प्रश्न गलत तरीके से फेंक दिए जाते हैं और एक त्रुटि प्रदर्शित होती है।ईमेल पते को सत्यापित करने के लिए एमएक्स रिकॉर्ड का उपयोग

सभी स्पैम संदेश नकली ईमेल पते का उपयोग करते हैं उदा। [email protected]

अमेरिका में समर्पित PHP5 लिनक्स सर्वर, mysql, केवल स्पैम लॉगिंग, गैर स्पैम संदेशों को ईमेल करना (संग्रहीत नहीं)।

प्रस्ताव: उपयोग php के checkdnsrr(preg_replace(/^[email protected]/, '', $_POST['email']), 'MX') जाँच करने के लिए ईमेल डोमेन एक मान्य पता करने के लिए हल करता है, फाइल करने के लिए प्रवेश करें, फिर संदेशों कि समाधान नहीं होता है के लिए एक त्रुटि के साथ पुन: निर्देशित, पते के लिए के रूप में पहले स्पैम फिल्टर सेवा के लिए आगे बढ़ें जो checkdnsrr() के अनुसार हल करता है।

मैंने पढ़ा है (और मुझे इस बारे में संदेह है) कि आपको रिमोट लुकअप तक इस प्रकार की सत्यापन कभी नहीं छोड़नी चाहिए, लेकिन क्यों?

कनेक्टिविटी के मुद्दों के अलावा, जहां मुझे संपर्क फ़ॉर्म की तुलना में बड़ी समस्याएं होंगी, क्या चेकडेंसर को झूठी सकारात्मक/नकारात्मक का सामना करना पड़ रहा है?
क्या कुछ पता प्रकार होंगे जो हल नहीं होंगे? जीओवी पते? आईपी ​​ईमेल पते?
क्या मुझे hostd से बचने की आवश्यकता है जिसे मैं checkdnsrr() पर भेजता हूं?

समाधान: सभी तीन उत्तरों का संयोजन (इच्छा है कि मैं एक से अधिक संकलन उत्तर के रूप में स्वीकार कर सकता हूं)।

मैं उपयोग कर रहा हूँ:

$email_domain = preg_replace('/^[email protected]/', '', $email).'.'; 
if(!checkdnsrr($email_domain, 'MX') && !checkdnsrr($email_domain, 'A')){ 
    //validation error 
} 

सभी स्पैम लॉग इन किया जा रहा है और घुमाया। बाद की तारीख में नौकरी कतार में अपग्रेड करने के लिए।

कुछ टिप्पणियों को उपयोगकर्ता के सत्यापन के लिए मेल सर्वर से पूछने के बारे में बताया गया था, मुझे लगा कि यह बहुत अधिक ट्रैफिक होगा और मेरे सर्वर को किसी भी तरह से प्रतिबंधित या परेशानी हो सकती है, और यह केवल अधिकांश में कटौती करने के लिए है अमान्य सर्वर पतों के कारण ईमेल को वापस बाउंस किया जा रहा था।

http://en.wikipedia.org/wiki/Fqdn और (एक रिकॉर्ड वापस आने टिप के लिए विशेष रूप से ZoogieZork) सभी

RFC2821 
The lookup first attempts to locate an MX record associated with the name. 
If a CNAME record is found instead, the resulting name is processed as if 
it were the initial name. 
If no MX records are found, but an A RR is found, the A RR is treated as 
if it was associated with an implicit MX RR, with a preference of 0, 
pointing to that host. If one or more MX RRs are found for a given 
name, SMTP systems MUST NOT utilize any A RRs associated with that 
name unless they are located using the MX RRs; the "implicit MX" rule 
above applies only if there are no MX records present. If MX records 
are present, but none of them are usable, this situation MUST be 
reported as an error. 

बहुत धन्यवाद

+0

+1 .. मैं MX रिकॉर्ड की जांच .. thats एक अच्छा विचार मुझे लगता है कि द्वारा एक मान्य ईमेल के लिए जाँच की कभी नहीं सुना है। – Earlz

+3

आरएफसी 5321 में परिभाषित किए गए कोई एमएक्स रिकॉर्ड सूचीबद्ध होने पर रिकॉर्ड को जांचने के लिए ध्यान रखें। यह दुर्लभ है, लेकिन कुछ डोमेन में एमएक्स रिकॉर्ड नहीं है (विभिन्न कारणों से)। अधिक जानकारी: http://en.wikipedia.org/wiki/MX_record#History_of_fallback_to_A – ZoogieZork

+0

चीयर्स ज़ोर, बिल्कुल गॉथस की तरह मैं चिंतित था। –

उत्तर

4

मुझे कोई checkdnsrr() के साथ एक एमएक्स देखने कर नुकसान को देखते हैं और मैं भी कैसे नहीं दिख रहा है झूठी सकारात्मक दिखाई दे सकते हैं। आपको मेजबाननाम से बचने की जरूरत नहीं है, वास्तव में आप इस तकनीक का उपयोग कर सकते हैं और एमटीए से बात करके थोड़ा और आगे ले सकते हैं और परीक्षण कर सकते हैं कि उपयोगकर्ता किसी दिए गए होस्ट पर मौजूद है (हालांकि यह तकनीक शायद आपको कुछ झूठी मिल जाएगी कुछ मेजबानों में सकारात्मक)।

+6

अधिकांश एसएमटीपी होस्ट जो आप जंगली में पा सकते हैं वे वीआरएफवाई कमांड को अच्छी तरह से प्रतिक्रिया नहीं देंगे (हमेशा ठीक है और साथ ही हमेशा त्रुटि भी प्रतिक्रियाएं आप उम्मीद कर सकते हैं)। पते को मान्य करने के लिए वीआरएफवाई का उपयोग करना बेहद निराश है। – Guss

5

नेटवर्क ट्रैफ़िक & भीड़ के आधार पर DNS लुकअप कई बार धीमा हो सकता है, इसलिए यह कुछ पता होना चाहिए।

अगर मैं आपके जूते में था, तो मैं इसका परीक्षण करता हूं और देखता हूं कि यह कैसा चल रहा है। एक हफ्ते के लिए, किसी भी डेटाबेस या लॉग फ़ाइल में सभी ईमेल लॉग इन करें और यह इंगित करने के लिए एक फ़ील्ड शामिल करें कि इसे स्पैम या वैध ईमेल के रूप में चिह्नित किया जाएगा या नहीं। सप्ताह खत्म हो जाने के बाद, परिणामों पर नज़र डालें और देखें कि यह प्रदर्शन कर रहा है या नहीं।

यह लॉगिंग/परीक्षण दृष्टिकोण लेना आपको इसका परीक्षण करने और ग्राहक ईमेल खोने के बारे में चिंता करने की लचीलापन देता है।

मुझे अपने रूपों में एक अतिरिक्त फ़ील्ड जोड़ने की आदत मिली है जो सीएसएस के साथ छिपा हुआ है, अगर यह भरा हुआ है तो मुझे लगता है कि यह स्पैम बॉट द्वारा सबमिट किया जा रहा है। मैं "url" या "website_url" जैसे किसी नाम का उपयोग करना सुनिश्चित करता हूं जो किसी स्पैम बॉट पर वैध फ़ील्ड नाम जैसा दिखता है। उस फ़ील्ड के लिए एक लेबल जोड़ें जो "इस फ़ील्ड को भरें नहीं" जैसा कुछ कहता है, इसलिए यदि कोई ब्राउज़र सही ढंग से प्रस्तुत नहीं करता है, तो वे स्पैम फ़ील्ड को भरने के बारे में नहीं जानते। अब तक यह मेरे लिए बहुत अच्छा काम कर रहा है।

+1

पुन: छुपा क्षेत्र - अच्छा विचार! लॉगिंग के लिए - सुनिश्चित करें कि आप DNS रिकॉर्ड को हल करने के लिए आपके द्वारा लिया गया समय भी लॉग करते हैं। आप यह पता लगा सकते हैं कि इसमें बहुत लंबा समय लगता है और परिणामस्वरूप खराब उपयोगकर्ता अनुभव होता है। – Guss

+0

मैं अब छिपे हुए क्षेत्र का परीक्षण कर रहा हूं, ठीक काम करता है, हालांकि कुछ ... उपयोगकर्ता टाइप कर रहे हैं "इस क्षेत्र में क्या रखना है" –

+0

यदि उपयोगकर्ता फ़ील्ड में कुछ भी टाइप कर रहे हैं, तो यह ठीक से छुपा नहीं जा रहा है। आपके सीएसएस में एक बग हो सकता है जो फ़ील्ड को सही तरीके से छुपा नहीं रहा है। मैं आमतौर पर कुछ इस तरह करते हैं: <= के लिए लेबल "URL"> इस पाठ बॉक्स पर ध्यान न दें। इसका उपयोग रद्दी मेल भेजने वाले का पता लगाने के लिए किया जाता है। यदि आप इस टेक्स्ट बॉक्स में कुछ भी दर्ज करते हैं, तो आपका संदेश नहीं भेजा जाएगा। मैं किसी भी स्पैम रूपों मैं कहाँ है के लिए आ रहा नहीं देखा है काफी समय के लिए इसे लागू किया। – bradym

0

एक एमएक्स लुकअप केवल तस्वीर का हिस्सा है, यदि आप यह सुनिश्चित करना चाहते हैं कि ईमेल पता स्वयं मान्य है, तो आपको उस खाते में एक ईमेल भेजने का प्रयास करने की आवश्यकता है।

अन्य संभावित परिदृश्य यह है कि कोई भी किसी समझौता मशीन से अपहृत ईमेल खातों का उपयोग कर सकता है। बेशक, यह शायद होने की संभावना कम है, लेकिन यह अभी भी करता है।

वहां ईमेल पता सत्यापन पुस्तकालय हैं जो ऐसा करते हैं, बस ईमेल सत्यापन की खोज करें।

यह सब अतुल्यकालिक रूप से किया जा सकता है। मेरे पास इस साइट पर यह सेटअप है, जिस स्थिति में ईमेल डेटाबेस (ऑडिटिंग उद्देश्यों के लिए) में सहेजा जाता है, एक नौकरी कतारबद्ध होती है, फिर जब नौकरी निष्पादित करने का समय आता है, तो समय पर उस समय कोई अतिरिक्त सत्यापन किया जाता है। यह भारी उठाने को दूसरे धागे में बंद कर देता है।

उपयोगकर्ता को, ऐसा लगता है कि ईमेल पहले से ही भेजा गया था, यह था (यह डेटाबेस में है), और आंतरिक रूप से देखा जा सकता है, लेकिन वास्तविक ईमेल तब तक मेल नहीं खाया जाएगा जब तक कि उस नौकरी निष्पादित न हो सर्वर लोड के आधार पर तत्काल या कुछ निर्धारित समय।

वाल्टर

+0

मुझे सत्यापन कार्य कतार –

+0

का विचार पसंद है यह एक नौकरी कतार है, उस नौकरी का हिस्सा सत्यापन करना है। इस मॉडल के साथ समस्या यह है कि कोई व्यक्ति एक ईमेल दर्ज कर सकता है जो सोचता है कि यह वैध है और भेजा गया है, और फिर जब इसे बाद में संसाधित किया जाता है, तो सिस्टम इसे अस्वीकार कर देगा। –

0
function mxrecordValidate($email){ 
     list($user, $domain) = explode('@', $email); 
     $arr= dns_get_record($domain,DNS_MX); 
     if($arr[0]['host']==$domain&&!empty($arr[0]['target'])){ 
       return $arr[0]['target']; 
     } 
} 
$email= '[email protected]'; 

if(mxrecordValidate($email)) { 
     echo('This MX records exists; I will accept this email as valid.'); 
} 
else { 
     echo('No MX record exists; Invalid email.'); 
} 
संबंधित मुद्दे

 संबंधित मुद्दे