कैसे और कब filter_xss () और check_plain () का उपयोग करना है?


11

views-view-fields--magazine--magazine.tpl.phpमेरी वेबसाइट में इस तरह की बहुत सारी टेम्प्लेट फाइलें हैं । कैसे और कब मुझे सुरक्षा में सुधार के लिए filter_xss () और check_plain () का उपयोग करना चाहिए? उदाहरण के लिए यह कोड है:

<div>
    <div class="bf-header bf-article-header"><?php print $fields['title']->content; ?></div>
    <div class="bf-article-body"><?php print $fields['field_magazine_body']->content;?></div>
    <div class="bf-article-image"><?php print $fields['field_magazine_image']->content;?></div>
</div>
<div class="separator article-view-separator"></div>

मैं उन कार्यों को कैसे लागू कर सकता हूं?


का प्रयोग करें filter_xss()आप संभावित खतरनाक सामग्री (एक अविश्वसनीय उपयोगकर्ता से यानी सामग्री) से फिल्टर XSS करना चाहते हैं, और check_plain()आप एक स्ट्रिंग से HTML विशेष वर्ण से बचें करना चाहते हैं
क्लाइव

जवाबों:


13

सबसे पहले, Drupal API में इनके बारे में पढ़ें:

इसलिए उन check_plain()विशेष वर्णों को एनकोड करता है, जिनका HTML (जैसे <और &) में विशेष अर्थ है सादा पाठ संस्थाओं में (अर्थात &lt;और &amp;क्रमशः) जो कि इन्हें शाब्दिक रूप से प्रस्तुत किया जाएगा (HTML के रूप में व्याख्या नहीं) जब उस स्ट्रिंग को तब पृष्ठ के भाग के रूप में प्रदर्शित किया जाता है एचटीएमएल-मार्कअप। filter_xss()क्रॉस-साइट-स्क्रिप्टिंग (XSS) भेद्यता को रोकने के लिए फ़ंक्शन HTML स्ट्रिंग को फ़िल्टर करता है। यह चार काम करता है:

  • उन पात्रों और निर्माणों को हटाना जो ब्राउज़र को धोखा दे सकते हैं
  • यह सुनिश्चित करना कि सभी HTML इकाइयां अच्छी तरह से बनाई गई हैं
  • सुनिश्चित करें कि सभी HTML टैग और विशेषताएँ अच्छी तरह से बनाई गई हैं
  • सुनिश्चित करें कि कोई HTML टैग्स में एक अस्वीकृत प्रोटोकॉल के साथ URL नहीं हैं (जैसे जावास्क्रिप्ट :)

दोनों फ़ंक्शन का उपयोग उपयोगकर्ताओं से डेटा को साफ करने के लिए किया जाता है ताकि यह सुनिश्चित किया जा सके कि आपकी साइट पर डेटा प्रदान करने से पहले किसी भी उपयोगकर्ता इंजेक्शन को बेअसर कर दिया गया है ।

आप दोनों के माध्यम से एक ही स्ट्रिंग पास नहीं करते

यदि आप उपयोग करते हैं check_plain()तो फ़ंक्शन को दी गई स्ट्रिंग को सादे पाठ (HTML नहीं) के रूप में उपयोग किया जाना चाहिए । तब filter_xss()जरूरत नहीं है, क्योंकि check_plain()हमेशा स्ट्रिंग सादे पाठ बना देगा।

यदि आप उपयोग करते हैं filter_xss(), तो फ़ंक्शन को दी गई स्ट्रिंग को HTML माना जाता है, और check_plain()इसे गड़बड़ कर देगा।

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

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


मैं उपयोगकर्ताओं के लिए इनपुट्स के लिए कहां से जांच कर सकता हूं? उदाहरण के लिए एक सामग्री प्रकार है और अनाम उपयोगकर्ताओं को उस तरह के नोड्स बनाने की अनुमति है।
एम अमा डी

@Drupalist, आपको कभी भी बेनामी उपयोगकर्ता को "असुरक्षित" पाठ प्रारूप का उपयोग करने की अनुमति नहीं देनी चाहिए। प्रशासन »कॉन्फ़िगरेशन» सामग्री संलेखन »पाठ प्रारूप पर नेविगेट करें । Drupal के साथ आने वाले "सुरक्षित" पाठ प्रारूप "फ़िल्टर किए गए HTML" और "सादे पाठ" हैं। यदि ये केवल अनाम उपयोगकर्ता के लिए अनुमत प्रारूप हैं, तो Drupal आपके लिए किसी भी बिल्ट-इन नोड प्रकार के लिए आवश्यक जाँच करता है और कोई भी नोड प्रकार जो आप कोर फ़ील्ड्स फ़ीचर के साथ बनाते हैं। यदि आपका उपयोग का मामला इससे अलग है, तो उपयोग के मामले की वर्तनी का एक नया प्रश्न पूछें।
नि: शुल्क कट्टरपंथी

अनाम उपयोगकर्ताओं को केवल उपयोग करने की अनुमति हैplain text
M ama D

@ डॉक्टर, यह ठीक है। सादा पाठ को पवित्र करने के लिए इन कार्यों का उपयोग करने की कोई आवश्यकता नहीं है।
नि: शुल्क कट्टरपंथी

3
@ARUN, नहीं। मानक ड्रुपल अभ्यास हमेशा डीबी में उपयोगकर्ता के प्रकारों को सटीक रूप से सहेजने और पाठ से पहले पाठ को पवित्र करने के लिए होता है।
फ्री रेडिकल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.