मैं यह सुनिश्चित करना चाहता हूं कि मेरे प्लग इन / थीम के सभी डेटा को डेटाबेस में प्रवेश करने से पहले और ब्राउज़र पर आउटपुट होने से पहले सुरक्षित रूप से संभाला जाए। मेरी समस्या यह है कि ऐसी परिस्थितियाँ हैं जहाँ एपीआई आपके लिए सैनिटाइजेशन को संभालता है - जैसे कि पोस्ट मेटा फ़ील्ड्स को सहेजते समय - और अन्य जहाँ प्लगइन / थीम लेखक इसे करने के लिए पूरी तरह से जिम्मेदार है - जैसे कि कस्टम सेटिंग्स को सहेजते समय।
इस प्रश्न के दायरे के लिए, मैं डोमेन स्तर पर डेटा को सत्यापित करने के बारे में चिंतित नहीं हूं - उदाहरण के लिए, यह जाँचना कि किसी फॉर्म पर आयु क्षेत्र 0 से 120 के बीच है, या यह कि ई-मेल पता मान्य है। मैं केवल सुरक्षा के बारे में चिंतित हूं - उदाहरण के लिए, डेटाबेस को सहेजते समय SQL इंजेक्शन से बचने के लिए SQL प्रश्नों से बचना, या XSS से बचने के लिए HTML टेम्पलेट्स के लिए आउटपुट डेटा को साफ करना।
आउटपुट सैनिटाइजेशन के लिए, मुझे पता है कि आपको HTML टेम्प्लेट में हमेशा वैरिएबल जैसे जब esc_html()
और जैसे कार्यों का उपयोग करने की आवश्यकता होती है esc_attr()
। लेकिन, टेम्प्लेट टैग का उपयोग करते समय क्या होगा ? क्या वे सभी पहले से ही उत्पादन को साफ करते हैं? यदि हां, तो किस संदर्भ के लिए (सामान्य HTML, टैग विशेषताएँ, आदि)? कुछ कार्यों में विभिन्न संदर्भों के लिए वेरिएंट होते हैं (जैसे the_title_attribute()
, लेकिन अधिकांश नहीं।
इनपुट सैनिटाइजेशन के लिए, मुझे पता है कि मुझे $wpdb->prepare()
मैन्युअल क्वेरी बनाते समय उपयोग करने की आवश्यकता है , लेकिन एक सेटिंग सेटिंग्स पेज बनाने के लिए सेटिंग्स एपीआई का उपयोग करते समय या कस्टम पोस्ट प्रकार के लिए पोस्ट मेटा फ़ील्ड को बचाने के बारे में क्या?
अभी मैं सिर्फ कोर और रीडिंग ट्यूटोरियल्स के माध्यम से खुदाई कर रहा हूं हर बार जब मैं यह पता लगाने के लिए किसी फ़ंक्शन का उपयोग करता हूं कि यह स्वच्छता है या नहीं, लेकिन यह त्रुटि-प्रवण और समय लेने वाली है। मैं सभी संभावित स्थितियों की किसी प्रकार की व्यापक सूची प्राप्त करने की उम्मीद कर रहा हूं और चाहे एपीआई इसे संभालती हो या नहीं। जैसे,
एपीआई मान्य / sanitizes
- सेविंग पोस्ट मेटा के साथ
update_postmeta()
- के साथ उपयोगकर्ता मेटा सहेजा जा रहा है
update_user_meta()
- पोस्ट शीर्षक का आउटपुट - के संदर्भ में उपयुक्त रूपांतर का उपयोग करें
the_title()
- आदि
आपको मैन्युअल रूप से मान्य / स्वच्छता करना होगा
- सेटिंग्स एपीआई के साथ प्लगइन विकल्प की बचत। 3 के पैरामीटर के रूप में कॉलबैक पास करें
register_setting()
। - डायरेक्ट डेटाबेस क्वेरीज़: इसमें क्वेरी लपेटें
$wpdb->prepare()
। - HTML में आउटपुट चर। का उपयोग करें
esc_attr()
,esc_html()
आदि - आदि
मुझे यह समझने में भी दिलचस्पी होगी कि एपीआई कुछ स्थितियों में इसे क्यों प्रदान करता है, लेकिन दूसरों को नहीं। मुझे लगता है कि यह डेटा की अज्ञात प्रकृति के साथ कुछ करना है, लेकिन पूरी तरह से स्पष्टीकरण सुनना पसंद करेंगे।
the_title()
, the_permalink()
आदि) के साथ वर्डप्रेस एपीआई का उपयोग करते समय आप ठीक हैं लेकिन कस्टम डेटा के साथ आप नहीं हैं (जैसे get_post_meta()
)। यदि संदेह है, तो अपने आप को पवित्र करें - यह चोट नहीं पहुंचा सकता है।