2013-06-14 10 views
9

मेरे पास एक ऐसा फॉर्म है जिसमें मैं उपयोगकर्ता से नाम, ईमेल और संदेश स्वीकार करता हूं। मैं नाम, ईमेल और संदेश के लिए सत्यापन करता हूं और इसे mail() फ़ंक्शन का उपयोग करके भेजता हूं।क्या मुझे ईमेल में भेजने से पहले उपयोगकर्ता द्वारा इनपुट किए गए डेटा को स्वच्छ करने की आवश्यकता है

यदि मैं डेटाबेस में $name, $email और $message इनपुट कर रहा था, तो मैं SQL डेटा इंजेक्शन के लिए इस डेटा से बच जाऊंगा; या, यदि मैं इसे किसी वेबपृष्ठ पर प्रतिबिंबित कर रहा था, तो मैं htmlspecialchars() का उपयोग करूंगा।

जब मैं इस डेटा को ईमेल में भेज रहा हूं तो मुझे क्या करना चाहिए? मुझे पता है मुझे एसक्यूएल इंजेक्शन के बारे में चिंता करने की ज़रूरत नहीं है, लेकिन एक्सएसएस के बारे में क्या? क्या मुझे इन तीन चरों पर भी htmlspecialchars() का उपयोग करना चाहिए?

मैं इस तरह मेल भेजने:

mail('[email protected]', 'Contact From: '. $name, "$message", 'From: '. $email); 

मैं ईमेल इंजेक्शन के बारे में पढ़ा है, लेकिन मैं इसे नहीं समझ सकता।

कृपया मुझे इसके बारे में बताएं।

+0

को रोकने के लिए यह निर्भर करता है कि कैसे आप इसे प्रयोग कर रहे हैं यकीन है कि यह एकवचन और नहीं एक से अधिक पते बनाने के लिए ईमेल पते की पुष्टि करने की जरूरत है। यदि आप उपयोग इनपुट के आधार पर सेथ हेडर सेट कर रहे हैं, तो हाँ, इसे sanitizing की आवश्यकता होगी। – andrewsi

+0

यह ऐसा कुछ भी है जिसे मैं समझ नहीं पा रहा हूं! मैं इसके लिए जवाब देखने के लिए तत्पर हूं। – pattyd

+0

मेल ('[email protected] ',' से संपर्क करें: '। $ नाम, "$ संदेश",' से: '। $ ईमेल); – user2471133

उत्तर

7

भागने से पूरी तरह से डेटा को सम्मिलित किए गए संदर्भ पर निर्भर करता है।

क्या आप HTML मेल भेज रहे हैं? फिर आपके पास HTML संदर्भ है, और htmlspecialchars() का उपयोग किया जाना चाहिए।

यदि आप सादा पाठ मेल भेज रहे हैं, तो सादे पाठ के लिए कोई भाग नहीं है।

एकमात्र खतरा यह होगा कि आपके मेल क्लाइंट में कुछ बग है जो सादे पाठ को कुछ निष्पादन योग्य के रूप में व्याख्या करता है और फिर कुछ अजीब नाम और मेल एड्रेस प्राप्त करते समय कार्य करता है।

लेकिन यह केवल मेल की सामग्री पर लागू होता है, वास्तविक हेडर नहीं।

आप कस्टम मेल हेडर From का उपयोग कर रहे हैं। इसका इस्तेमाल न करें। From स्पैम फ़िल्टर में उपयोग किया जाता है। अगर मैं अपना मेल पता दर्ज करूंगा, और आप इस मेल को From: [email protected] के साथ भेज रहे हैं, तो आप मेरा खुद का ईमेल सर्वर का प्रतिरूपण कर रहे हैं। स्पैम वास्तविक स्रोत को छिपाने के लिए इसका उपयोग करता था, और उस मेल पते के पीछे दुखी व्यक्ति को शिकायतें और त्रुटि प्रतिक्रिया को पुनर्निर्देशित करने के लिए उपयोग किया जाता था। इस वजह से आज ऐसे तंत्र हैं जो इस तरह के दुर्व्यवहार को रोक देंगे। तो बस नाटक मत करो मैं यह मेल भेज रहा हूं - आप करते हैं।

यदि आप उत्तर बटन पर क्लिक के साथ मुझे जवाब देने में सक्षम होना चाहते हैं, तो Reply-to शीर्षलेख का उपयोग करें, लेकिन हमेशा From: [email protected] का उपयोग करें।

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

+0

मैं उपयोगकर्ता को सबकुछ बता रहा हूं, सिवाय इसके कि ईमेल कहां जाता है। तो उपयोगकर्ता नाम, ईमेल और संदेश फ़ील्ड में एचटीएमएल टैग, स्क्रिप्ट टैग और ऐसे में प्रवेश कर सकता है – user2471133

0

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

इनपुट के लिए यह सबसे महत्वपूर्ण है कि आप इसे ब्राउज़र के लिए कैसे संचरित करेंगे।

+0

एचटीएमएल केवल तभी व्याख्या किया जाता है जब ईमेल हेडर बताते हैं कि सामग्री में HTML शामिल है। हाय युक्त सादे टेक्स्ट संदेश भेजने का प्रयास करें ... – deceze

+0

आपको नहीं लगता कि मैं इस तरह के उपयोगकर्ता के ईमेल को नुकसान पहुंचाऊंगा? अगर मैं htmlspecialchars() का उपयोग करता हूं? – user2471133

+0

सादे पाठ मेल में भी हमलावर एक दुर्भावनापूर्ण लक्ष्य के लिए एक लिंक डाल सकता है और हर आधुनिक ग्राहक इन्हें हाइलाइट करेगा ... स्वच्छता और फ़िल्टरिंग महत्वपूर्ण है! – FloydThreepwood

3

आपको ईमेल स्पैमिंग

http://www.php.net/manual/en/filter.filters.validate.php

$email = "[email protected]"; 

if(!filter_var($email, FILTER_VALIDATE_EMAIL)) 
    { 
    echo "email not valid"; // do not send 
    } 
else 
    { 
    echo "email valid"; // send 
    } 
+0

तो मुझे केवल $ ईमेल फ़ील्ड को सत्यापित करने की आवश्यकता है, न कि $ नाम और $ संदेश? – user2471133

+0

@ user2471133 ईमेल var मुख्य भाग है लेकिन आप नाम और संदेश में @ at भी बदल सकते हैं। '$ name = str_replace ('[at]', '@', $ name);' '$ message = str_replace ('[at]', '@', $ message);' – amigura

+0

आपके लिए कुछ अतिरिक्त जानकारी [लिंक ] http://www.securephpwiki.com/index.php/Email_Injection [कड़ी] – amigura

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

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