xss_clean का उपयोग करना एक बार भी बुरा है, जहां तक मेरा संबंध है। यह दिनचर्या भागों को हटाने या भागों को प्रतिस्थापित करके अपने डेटा को स्वच्छ करने का प्रयास करता है। यह हानिकारक है और कई बार चलाने पर एक ही सामग्री को वापस करने की गारंटी नहीं है। भविष्यवाणी करना भी मुश्किल है और हमेशा उचित कार्य नहीं करेगा। एक स्ट्रिंग को स्वच्छ करने की कोशिश करने के लिए जो चीजें होती हैं, उन्हें देखते हुए इनपुट पर इसका उपयोग करने के लिए भारी प्रदर्शन किया जाता है। यहां तक कि t = t = जैसे इनपुट का सबसे छोटा सा हिस्सा xss_clean के लिए गतिविधि की झुकाव का कारण बनता है।
मैं यह कहना चाहूंगा कि आपको xss_clean का कभी भी उपयोग नहीं करना चाहिए, लेकिन वास्तव में मैं यह नहीं कह सकता। यह प्रणाली अनुभवहीन डेवलपर्स के लिए बनाई गई है जो उपयोगकर्ता सामग्री को सुरक्षित रूप से प्रबंधित करने के बारे में नहीं जानते हैं। मैं एक अनुभवी डेवलपर हूं इसलिए मैं कह सकता हूं कि जिस परियोजना पर मैं काम कर रहा हूं उसे कभी भी xss_clean का उपयोग करना चाहिए। तथ्य यह है कि, भ्रष्टाचार के मुद्दों को सरल उपयोग के साथ अनुभवहीन डेवलपर्स के लिए कम समस्याग्रस्त हो जाएगा और आखिरकार यह संभवतः अपने कोड को और अधिक सुरक्षित बनाएगा, भले ही उन्हें त्वरित गंदे और सस्ते हैक्स पर भरोसा करने के बजाय अपने कोड को और अधिक सुरक्षित बनाना चाहिए। दूसरी तरफ, xss_clean को आपके कोड को पूरी तरह से सुरक्षित बनाने की गारंटी नहीं है और अंततः सुरक्षा की झूठी भावना देकर चीजों को और खराब कर सकता है। आपको यह सुनिश्चित करने के लिए वास्तव में अध्ययन करने की अनुशंसा की जाती है कि आप यह सुनिश्चित कर लें कि आपका कोड वास्तव में सब कुछ करता है ताकि आप इसे वास्तव में सुरक्षित बना सकें। xss_clean कोड त्रुटियों के लिए क्षतिपूर्ति नहीं करता है, यह कोडर त्रुटियों के लिए क्षतिपूर्ति करता है।
आदर्श रूप से xss_clean केवल आउटपुट पर किया जाना चाहता है (और htmlentities, आदि के साथ प्रतिस्थापित होना चाहता है) लेकिन अधिकांश लोग इस से परेशान नहीं हैं क्योंकि उनके लिए फ़िल्टरिंग आउटपुट के बजाय सभी इनपुट फ़िल्टर करके डेटा शुद्धता का उल्लंघन करना आसान है (कुछ बार इनपुट हो सकता है लेकिन आउटपुट दस बार)। फिर, एक अनुशासित डेवलपर आउटपुट के उन दस मामलों में से एक के लिए xss_clean नहीं डाल सकता है।
वास्तविक रूप से, एकमात्र असली सभ्य तरीका यह है कि पृष्ठ पर प्रदर्शित होने के पल में सबकुछ ठीक से एन्कोड करना है। प्री-एम्प्टीव एन्कोडिंग के साथ समस्या यह है कि आप डेटा को गलत तरीके से एन्कोड किया जा सकता है और यदि इनपुट हो तो आप एन्कोड डेटा को डबल कर सकते हैं, फिर फॉर्म में आउटपुट कर सकते हैं, फिर फिर से इनपुट कर सकते हैं। यदि आप किसी संपादन बॉक्स की तरह कुछ सोचते हैं तो आपको डेटा वृद्धि के साथ कुछ गंभीर समस्याएं हो सकती हैं। सभी स्वच्छता सामग्री को हटा नहीं है। उदाहरण के लिए, यदि आप जोड़ते हैं तो यह सामग्री जोड़ देगा। यदि आपके द्वारा मिश्रित चलने पर हर बार आपकी सामग्री में स्लैश होता है तो यह बढ़ने के कारण एक नया स्लैश जोड़ा जाता है। यद्यपि एक अच्छा मौका है कि आपका डेटा एचटीएमएल में एम्बेडेड हो जाएगा, फिर भी आप हमेशा यह नहीं जान सकते कि डेटा कहां खत्म होगा। अचानक आपको एक नई आवश्यकता मिलती है जो पिछले डेटा पर लागू होती है और यही वह है, आप खराब हो जाते हैं क्योंकि आपने स्टोरेज से पहले आने वाले डेटा पर लागू और हानिकारक फ़िल्टर किया है। हानिकारक, इस मामले में, इसका मतलब आपके डेटाबेस में सभी उपयोगकर्ता डेटा को दूषित करने के बाद आपका काम हो सकता है। आपका डेटा आमतौर पर वेब एप्लिकेशन के लिए सबसे मूल्यवान चीज है। प्री-एम्प्टीव एन्कोडिंग के साथ यह एक बड़ी समस्या है। यदि आप हमेशा जानते हैं कि आपका डेटा शुद्ध है, तो यह काम करना आसान है और स्थिति के अनुसार इसे बच सकता है लेकिन यदि आपका डेटा लाइन के नीचे किसी भी स्थिति में हो सकता है तो यह बहुत ही समस्याग्रस्त हो सकता है। फ़िल्टरिंग कुछ सामयिक लॉजिकल ब्रेकेज भी कर सकती है। चूंकि स्वच्छता उदाहरण के लिए सामग्री को हटा सकती है, दो तार जो मेल नहीं खाते हैं मिलान के लिए किए जा सकते हैं।
इनपुट पर xss_clean के साथ समस्याओं में से कई लोग एक ही या मैजिक_कोट्स के लिए जैसे ही होते हैं: http://en.wikipedia.org/wiki/Magic_quotes
सारांश: आप इसे का उपयोग करना चाहिए नहीं बल्कि उपयोगकर्ता इनपुट पर बुरा डेटा ब्लॉक और उत्पादन पर ठीक से भाग जाते हैं। यदि आप उपयोगकर्ता डेटा को स्वच्छ करना चाहते हैं, तो यह क्लाइंट (ब्राउज़र, फॉर्म सत्यापन) में होना चाहिए ताकि उपयोगकर्ता इसे देख सके। आपके पास अदृश्य डेटा परिवर्तन कभी नहीं होना चाहिए। यदि आपको xss_clean चलाना होगा। आपको आउटपुट पर केवल एक बार इसे चलाने चाहिए।यदि आप इनपुट के सत्यापन के लिए इसका उपयोग करने जा रहे हैं, तो $ post_data! == xss_clean ($ post_data) तो अस्वीकार करें।
xss_clean _not_ वैश्विक रूप से '<' and '> 'रूपांतरित करता है। यह [सुरक्षित 'एचटीएमएल टैग' को अनुमति देने के लिए डिज़ाइन किया गया है (https://github.com/EllisLab/CodeIgniter/issues/470#issuecomment-2156667) – sourcejedi