wpdb-> सम्मिलित करें: क्या मुझे एसक्यूएल इंजेक्शन के खिलाफ तैयार करने की आवश्यकता है?


14

क्या मुझे wpdb-> डालने से पहले wpdb की तैयारी का उपयोग करने की आवश्यकता है?

अगर मैं wpdb-> सम्मिलित का उपयोग करते हुए एक वर्डप्रेस तालिका में मान डाल रहा हूं, तो क्या मुझे डालने से पहले अपने डेटा को "क्लीन" करने की आवश्यकता है या क्या यह विधि (wpdb-> सम्मिलित) मेरे लिए है?

जवाबों:


21

नहीं, आपको डेटा तैयार या बचना नहीं चाहिए, यह आपके लिए wpdbकक्षा द्वारा किया जाता है ।

से wpdb वर्ग संदर्भ :

डेटा :

(सरणी) सम्मिलित करने के लिए डेटा (कॉलम में = मूल्य जोड़े)। दोनों $ डेटा कॉलम और $ डेटा मान "कच्चे" (न ही एसक्यूएल बच जाना चाहिए) होना चाहिए।

यदि, हालांकि, आप insertविधि का उपयोग करने के बजाय अपनी स्वयं की SQL लिख रहे थे , तो हाँ, आपको इसका उपयोग करने से बचना चाहिए prepare


8
एक नोट जोड़ने के लिए: दोनों insertऔर updateइसकी आवश्यकता नहीं है। लेकिन इसके साथ इस्तेमाल किया जाना चाहिए query
kaiser

1

निम्नलिखित wpdb वर्ग के लिए एक चेतावनी है।

https://codex.wordpress.org/Class_Reference/wpdb

चेतावनी

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

इसलिए मैं इसे पढ़ता हूं - wpdb वर्ग आपके लिए डेटा को स्वचालित रूप से तैयार या बच नहीं करता है।

मुझे पूरा यकीन है कि अगर आप अपने कोड में 100% डेटा स्रोत पर भरोसा नहीं कर सकते हैं, तो मैं तैयार वर्ग (?) का उपयोग करने का सुझाव देता हूं।

यह मत सोचिए कि तैयारी वर्ग का उपयोग करने से यह तैयार वर्ग का उपयोग किए बिना ठीक हो जाएगा। मैं इसके लिए बिल्कुल नया हूं इसलिए कृपया उत्तर के रूप में कोई भी सुधार पोस्ट करें यदि मैं सही नहीं हूं।

$ wpdb-> तैयार ("तालिका से चयन करें * जहां आईडी =% डी और नाम =% s", $ आईडी, $ नाम);

उपरोक्त कथन में, 2 अतिरिक्त विशेषताएँ हैं। एक आईडी के लिए और एक नाम के लिए। जहां तक ​​मैंने इसे पढ़ा है, प्रत्येक आपकी क्वेरी में आइटम की संख्या के अनुरूप है। साथ ही% s = string,% d = पूर्णांक और% f = फ्लोट।

इसके अलावा, मेरे पढ़ने से, यदि आप अतिरिक्त विशेषताओं को नहीं रखते हैं, तो तैयारी वास्तव में कुछ नहीं करेगी। एक चेतावनी होगी, लेकिन अगर आप इसे बंद कर देते हैं, तो शायद आपको पता नहीं चलेगा।

यहां क्लास रेफरेंस से ही एक उदाहरण दिया गया है, जहां वे नीचे INSERT में एक तैयार क्लास जोड़ते हैं।

https://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks

$ wpdb-> क्वेरी ($ wpdb-> तैयार ("INSERT INTO $ wpdb-> postmeta (post_id, meta_key, meta_value) VALUES) (% d,% s),% (), सरणी (10, $ metakey, $ metavalue) ));

मेरी चिंता यह है कि उत्क्रमित उत्तर उसी पृष्ठ के अनुसार गलत है जिसमें 'कोई नहीं' सन्दर्भ है। मैं मान रहा हूं कि आप तैयारी का उपयोग करते हैं () लेकिन भागने के अन्य मानक php तरीके नहीं हैं क्योंकि मैंने इस उत्तर को भी सही लिया है ... जब तक कि मैंने गहरा खोदा नहीं।

वैसे भी ... मूल उत्तर के बाद से शायद चीजें बदल गई हैं।


हम्म, यह एक जवाब की तुलना में एक प्रश्न की तरह अधिक लगता है
मार्क कप्लुन

स्वीकृत उत्तर सही है। जब आप फ़ंक्शन का उपयोग करते हैं $wpdb->insert(), तो $ wpdb-> अपडेट () `या $wpdb->delete()डेटा रॉ होना चाहिए। ऐसी स्थिति में जहां आप उदाहरण के लिए $wpdb->query()और इनपुट के रूप में SQL स्टेटमेंट पास करते हैं, आपको अविश्वासित डेटा से बचना चाहिए।
nmr

nmr, मुझे लगता है कि मैं अब समझ गया हूं। इसलिए स्पष्ट करने के लिए ... मेरी पवित्रता के लिए ... आपने एक उदाहरण के रूप में जो प्रयोग किया है वह है 'क्वेरी विधि' का उपयोग करने वाले उदाहरणों के विपरीत 'इन्सर्ट विधि और' डिलीट विधि '... (% wpdb) -> क्वेरी)। क्या मैं अपना उत्तर हटा दूं? या इसे छोड़ दें?
फेलिक्सियस

0

नहीं, जब आप उपयोग करते हैं तो आपको SQL इंजेक्शन से बचने की आवश्यकता नहीं होती है - wpdb इन्सर्ट या wpdb डिलीट।यहाँ छवि विवरण दर्ज करें

निम्नलिखित लिंक देखें:

https://codex.wordpress.org/Data_Validation#Database

https://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.