2012-05-03 13 views
11

मेरे पास एक ऐसा पृष्ठ है जहां मैं जीईटी पैरामीटर में एक ईमेल पता स्वीकार करना चाहता हूं। अगर मैं FILTER_VALIDATE_EMAIL का उपयोग करता हूं, तो क्या मैं अभी भी xss और जावास्क्रिप्ट इंजेक्शन हमलों के लिए कमजोर हूं, और जैसा?क्या PHP का FILTER_VALIDATE_EMAIL पर्याप्त सुरक्षा प्रदान करता है?

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

उत्तर

9

हां, कुछ सावधानीपूर्वक तैयार किए गए तारों के लिए एक वैध ईमेल पता कंटेनर के रूप में उपयोग किया जा सकता है।

"फ़िल्टरिंग" मानसिकता से बाहर निकलें और "भागने" मानसिकता में शामिल हो जाएं। एक सार्वभौमिक "इसे सुरक्षित करें" फ़िल्टर बस मौजूद नहीं है।

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

यह सब कुछ उपयोग के संदर्भ के बारे में है, स्ट्रिंग की सामग्री नहीं। यह सबकुछ (केवल ईमेल या अन्य उपयोगकर्ता इनपुट नहीं) के लिए जाता है, और यह केवल सुरक्षा का मामला नहीं है, लेकिन यह प्रोग्रामिंग शुद्धता का विषय है।

fyi, मुझे ईमेल पता spec उद्धृत तारों की अनुमति देता है, इसलिए "<script>alert('xss')</script>"@example.com जैसे कुछ मान्य होंगे। possibibilites स्पष्ट हैं।

+1

उदाहरण के लिए, कोई सार्वभौमिक "सुरक्षित" ग्रीटिंग नहीं है। कुछ समाजों में विनम्र क्या है दूसरों में कठोर है। अपने संदर्भ को जानें! – Xeoncross

+1

+1। FILTER_VALIDATE_EMAIL यह जांचने के लिए है कि ई-मेल पते मान्य हैं या नहीं, जैसा उपरोक्त उदाहरण दिखाता है, इसका कोई अन्य इंजेक्शन समस्या से कोई लेना देना नहीं है। यदि यह * ब्लॉक उद्धरण या उससे कम था, तो यह केवल सह-घटनाओं से होगा और ऐसा कुछ नहीं होगा जिस पर आपको भरोसा करना चाहिए। – bobince

2

यह काफी अच्छा होना चाहिए, लेकिन स्वाभाविक रूप से आपको डेटाबेस में प्रवेश करते समय इसे अभी भी बचाना चाहिए। आप कभी नहीं जानते कि PHP या अपाचे आदि में किस प्रकार की बग मौजूद हो सकती है, जो किसी भी तरह से होने वाले हमले की अनुमति दे सकती है ।

+5

बग के साथ कुछ भी नहीं करना। वैध ईमेल पते स्वचालित रूप से डेटाबेस-सुरक्षित नहीं होते हैं। ईमेल 'john.o'connor @ somewhere.com' आपको दुःख देगा यदि आप इसे एक SQL क्वेरी में इंजेक्ट करते हैं ... – Cylindric

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