2010-01-24 8 views
14

मैं वर्डप्रेस का उपयोग एक सीएमएस के रूप में कर रहा हूं।वर्डप्रेस का उपयोग करके, क्या कोई मुझे इनपुट को स्वच्छ करने का सबसे अच्छा तरीका बता सकता है?

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

वर्तमान में मैं डेटा को स्वच्छ करने के लिए अपने स्वयं के तरीकों का उपयोग कर रहा हूं, लेकिन मुझे लगता है कि WP का उपयोग करने वाले कार्यों का उपयोग करना बेहतर हो सकता है।

मैंने वर्डप्रेस में Data Validation पर देखा है, लेकिन मुझे इस बात पर अनिश्चितता है कि इन कार्यों में से मुझे कितना उपयोग करना चाहिए, और किस क्रम में। क्या कोई बता सकता है कि डब्ल्यूपी फ़ंक्शन का उपयोग करने के लिए सबसे अच्छा क्या है?

वर्तमान में मैं ऐसा करके मेरी इनपुट "sanitizing" कर रहा हूँ निम्नलिखित:

  1. क्योंकि लहजे के साथ पात्रों (é, ô, æ हे, ए) डाटाबेस में एक अजीब तरह से संग्रहीत कर ली (भले ही मेरी टेबल ENGINE=InnoDB, DEFAULT CHARSET=utf8 और COLLATE=utf8_danish_ci पर सेट हो), अब मैं इनपुट फ़ील्ड को परिवर्तित कर रहा हूं जिसमें htmlentities() का उपयोग करके उच्चारण हो सकते हैं।

  2. डेटा इनपुट करने के लिए SQL स्ट्रिंग बनाते समय, मैं mysql_real_escape_string() का उपयोग करता हूं।

मुझे नहीं लगता कि यह हमलों को रोकने के लिए पर्याप्त है। तो सुधार के लिए सुझावों की बहुत सराहना की है।

उत्तर

16

इनपुट "sanitisation" फर्जी है।

आपको फ़िल्टरिंग (*) या इनपुट से बचकर इंजेक्शन की समस्याओं से खुद को बचाने का प्रयास नहीं करना चाहिए, आपको कच्चे तारों के साथ काम करना चाहिए जब तक कि आप उन्हें किसी अन्य संदर्भ में न रखें। उस बिंदु पर आपको उस संदर्भ के लिए सही एस्केपिंग फ़ंक्शन की आवश्यकता है, जो HTML आउटपुट के लिए mysql_real_escape_string है और HTML आउटपुट के लिए htmlspecialchars है।

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

अब मैं इनपुट फ़ील्ड को परिवर्तित कर रहा हूं htmlentities() का उपयोग कर उच्चारण कर सकते हैं।

मैं दृढ़ता से ऐसा करने की सलाह नहीं देता हूं। आपके डेटाबेस में कच्चा पाठ होना चाहिए; यदि आप इसे एचटीएमएल के रूप में एन्कोड करते हैं तो आप स्तंभों पर डेटाबेस संचालन करना अधिक कठिन बनाते हैं। आप गैर-ASCII वर्णों के साथ-साथ < और " जैसे वर्णों से बच रहे हैं। जब आप डेटाबेस से डेटा प्राप्त करते हैं और इसे किसी अन्य कारण से पृष्ठ में कॉपी करने के बजाय इसका उपयोग करते हैं, तो अब आपको डेटा में नकली HTML-escapes मिल गया है। आखिरी पल तक आप पेज पर टेक्स्ट लिख रहे हैं, तब तक एचटीएमएल-एस्केप न करें।

यदि आपको डेटाबेस में गैर-ASCII वर्ण प्राप्त करने में समस्या हो रही है, तो यह एक अलग समस्या है जिसे आपको HTML-एन्कोडेड डेटा संग्रहीत करने जैसे अस्थिर कामकाज के लिए पहले हल करना चाहिए।PHP और डेटाबेस को उचित यूटीएफ -8 से बात करने के बारे में यहां कई पोस्ट हैं, लेकिन मुख्य बात यह सुनिश्चित करना है कि Content-Type हेडर/मेटा का उपयोग करके अपने एचटीएमएल आउटपुट पेजों को स्वयं यूटीएफ -8 के रूप में सही तरीके से परोसा जाता है। फिर जांचें कि आपका MySQL कनेक्शन यूटीएफ -8 पर सेट है, उदाहरण के लिए mysql_set_charset() का उपयोग करना।

डेटा इनपुट करने के लिए SQL स्ट्रिंग बनाते समय, मैं mysql_real_escape_string() का उपयोग करता हूं।

हाँ, यह सही है। जब तक आप ऐसा करते हैं तो आप SQL इंजेक्शन के लिए कमजोर नहीं होते हैं। आप हो सकता है कि HTML-इंजेक्शन (XSS का कारण बनें) के लिए vulnerabile हो, यदि आप टेम्पलेट आउटपुट अंत के बजाय डेटाबेस अंत में HTML-escaping हैं। चूंकि डेटाबेस से गुजरने वाली कोई स्ट्रिंग नहीं है (उदाहरण के लिए $_GET से सीधे लाया गया) HTML-escaped नहीं होगा।

+12

WP में SQL क्वेरी करने के लिए, आपको mysql_real_escape_string का उपयोग करने के बजाय $ wpdb-> ready() विधि का उपयोग करना चाहिए। यदि आप किसी भी तरह से WP एपीआई का उपयोग करना चाहते हैं। – nickohrn

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