2011-07-06 17 views
7

मेरे पास मेरी साइट पर एक PHP संचालित HTML संपर्क फ़ॉर्म है। वर्तमान में मैं PHP mail() फ़ंक्शन का उपयोग करता हूं। इसके कारण मुझे email header injection attacks से बचने के लिए कई उपयोगकर्ता इनपुट सत्यापन करना है। मुझे लगता है कि मैं सुरक्षित हूं, लेकिन शायद मैं कुछ भूल गया था और मैं एक ठोस PHP ईमेल लाइब्रेरी में जाना चाहता हूं। मैंने चुनी लाइब्रेरी Swiftmailer है।स्विफ्टमेलर का उपयोग कर PHP-संचालित HTML संपर्क फ़ॉर्म कितना सुरक्षित हो सकता है?

  1. निकालता है या इस नाम में < और > वर्ण से बचें:

    अब मैं अगर Swiftmailer संबोधित निम्नलिखित जाँच करना चाहते हैं।

  2. प्रेषक नामों से न्यूलाइन (\n, \r\n ...) हटा देता है।
  3. ईमेल विषय से नई पंक्तियों को हटा या निकालें।
  4. संदेश निकाय (ईमेल की सामग्री) में न्यूलाइन सामान्यीकृत करें। PHP दस्तावेज़ों के अनुसार, \n सामग्री में और \r\n ईमेल हेडर सेपरेटर के रूप में उपयोग किया जाना चाहिए।

पीएस: मैंने सफलता के बिना अपने प्रश्नों के साथ स्विफ्टमेलर टीम से संपर्क करने का प्रयास किया ताकि मैं यहां कोशिश कर रहा हूं।

संपादित करें:

मैं Swiftmailer के साथ कुछ परीक्षण मामलों किया था और इस मैं अब तक क्या मिला है:

  1. जब आप एक प्रेषक के नाम पर एक < या > है, तो आप प्राप्त अविश्वसनीय ईमेल त्रुटि मेल। यह कुछ हद तक आपके मेल सर्वर के DOS attack में हो सकता है (शायद मैं गलत हूं)। क्या यह सामान्य है?!
  2. न्यूलाइन बच निकले हैं इसलिए इंजेक्शन हमला विफल हो गया है।
  3. न्यूलाइन बच निकले हैं इसलिए इंजेक्शन हमला विफल हो गया है।
  4. परीक्षण किया गया लेकिन मैं यह देखने में असमर्थ हूं कि स्विफ्टमेलर क्या करता है (अगर यह कुछ करता है)। तो मैं अभी भी अंधेरे में हूँ।

क्या कोई मेरे लिए # 1 और # 4 स्पष्ट कर सकता है? मुझे यकीन नहीं है कि यह सामान्य व्यवहार है ...

+6

तुम हमेशा कोड के माध्यम से देख सकते हैं ...स्विफ्टमेलर बस एक PHP स्क्रिप्ट है, आखिरकार। यदि आप कमजोरियों के बारे में इस भयावह हैं, तो शायद आप किसी भी बाहरी पुस्तकालयों का ऑडिट करना चाहते हैं। –

+2

'अनुरोध डेटा सामग्री को अलग किए बिना हेडर इंजेक्शन हमलों से सुरक्षित करें' (होमपेज से) और कोड के माध्यम से किसी न किसी प्रकार से स्कैन से मैं मानता हूं कि यदि आप किसी भी चीज़ में मान्य हैं जो वैध नहीं है, तो आपको एक मूक स्वीकृति के बजाय अपवाद मिलेगा । – hakre

+1

ऐसा लगता है कि जब तक आप किसी भी उपयोगकर्ता द्वारा सबमिट किए गए हेडर, और वर्डव्रैप ($ संदेश, 70) से \ n और \ r स्ट्रिप करते हैं, तो आपको ठीक होना चाहिए। प्रेषक नाम से < and > को अलग करने के साथ क्या सौदा है? मुझे यह जानने में बहुत दिलचस्पी होगी कि इन पात्रों के किस प्रकार के हैक आपको खुले छोड़ देते हैं। किसी भी जानकारी की काफी सराहना की जाती है। – dqhendricks

उत्तर

1

संपादित करें: यह उत्तर अप्रचलित हो सकता है। जब मैंने यह लिखा, स्विफ्टमेलर लाइब्रेरी के साथ कुछ समस्याएं थीं। इस बिंदु पर, सब कुछ SwiftMailer के साथ ठीक काम कर रहा है और PHPMailer से अधिक पेशकश करने के लिए बहुत अधिक लाइब्रेरी माना जाता है।

मैं सुझाव दूंगा कि आप phpmailer का उपयोग करें। यह अब तक का सबसे स्थिर मेलिंग पुस्तकालयों में से एक है। यहाँ एक उदाहरण कोड है कि काम करना चाहिए:

include("./phpmailer/class.phpmailer.php"); 
$mail = new PHPMailer(false); // the true param means it will throw exceptions on errors, which we need to catch 
$mail->IsSMTP(); 
$mail->Host = "YourDomainName.com"; 
$mail->SMTPDebug = 2; 
$mail->SMTPAuth = true; 
$mail->SMTPSecure = "tls"; 
$mail->Host = "YourSMTPMailServer.com"; 
$mail->Port = 587; 
$mail->Username = "[email protected]"; 
$mail->Password = "password"; // GMAIL password 
$mail->AddAddress("[email protected]", '<< >> ! " Receiver Name'); 
$mail->SetFrom('[email protected]', '<< >> ! " Sender Name'); 
$mail->Subject = "A testing subject"; 
$mail->AltBody = 'To view the message, please use an HTML compatible email viewer!'; 
$mail->MsgHTML('This is my <b>html</b> testing email, sent '.time()); 
$mail->Send(); 

आप इस कॉन्फ़िगर करने के लिए इतना है कि यह अपने ईमेल सर्वर से कनेक्ट की आवश्यकता होगी लेकिन यह काम किया जाना चाहिए। Phpmailer अब तक की हर चीज से बच निकला है। केवल मैं जांच रहा हूं "[email protected]" है। मैं इस कोड के साथ कार्य करें:

$email = "[email protected]"; 
$email = filter_var(filter_var($email,FILTER_SANITIZE_EMAIL),FILTER_VALIDATE_EMAIL); 

if($email){ 
    echo "This email is valid!"; 
} else { 
    echo "This email is INVALID!"; 
} 

मुझे आशा है कि इस मदद करता है :)

+2

हाँ मैं PHPMailer को बहुत अच्छी तरह से जानता हूं क्योंकि मैंने इसे कुछ वर्षों का उपयोग किया था। मुझे यह पसंद नहीं है कि यह कैसे काम करता है। दस्तावेज़/ट्यूटोरियल भी अपनी वेबसाइट से पुरानी हैं! मैं सिर्फ स्विफ्टमेलर को पसंद करता हूं क्योंकि इसका फेबियन पोटेनेंसर/सिम्फनी द्वारा समर्थित है। – AlexV

+0

@AlexV मैं हर समय स्विफ्टमेलर का उपयोग कर रहा हूं - अभी तक कोई समस्या नहीं है हालांकि मैं अग्रिम में उपयोगकर्ता नाम/ईमेल मान्य करता हूं और ऐसे <<> अक्षर मेलर तक पहुंचने से पहले लंबे समय से हटा दिए जाएंगे। – LazyOne

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

  • कोई संबंधित समस्या नहीं^_^