वर्डप्रेस प्लगइन्स और थीम्स के लिए सुरक्षा सर्वोत्तम अभ्यास क्या हैं? [बन्द है]


22

जैसा कि इस प्रश्न में सुझाव दिया गया है , मैं इस विषय को एक नए प्रश्न के रूप में जोड़ रहा हूँ, सामुदायिक चर्चा / प्लगिन / थीम सुरक्षा के लिए सर्वोत्तम प्रथाओं के बारे में।

यहाँ पर शुरुआती चेकलिस्ट है, जो मेरे वर्तमान (वर्क-इन-प्रोग्रेस) सेटिंग्स / डेटा सुरक्षा चेकलिस्ट पर आधारित है, जिसका इस्तेमाल थीम्स की समीक्षा के लिए किया जाता है (सिद्धांत प्लगइन्स के लिए अलग नहीं होने चाहिए, जितने वे थीम के लिए हैं)।

यदि आप किसी विषय को सुरक्षित और ठोस-कोडित थीम सेटिंग पृष्ठ से देखना चाहते हैं, तो इस विषय को देखें:
http://wordpress.org/extend/themes/coraline


यदि उपयुक्त विशेषाधिकार वाले किसी व्यक्ति को यह एक समुदाय विकी बनाने का मन नहीं करेगा?
चिप बेनेट

विकी मोड में एक प्रश्न प्राप्त करने के लिए एक मॉड को उचित रूप से प्रश्न को टैग करने की आवश्यकता होती है , मैंने इसे मॉड ध्यान के लिए फ्लैग किया है, यह अभी समय की बात है .. :)
t31os

कोरलीन के बारे में क्या खास है? Imo अभी भी अंदर आने के रास्ते हैं। मैं anons को लिंक करने का सुझाव दूंगा। एक शब्द: wordpress.stackexchange.com/questions/13539/…
kaiser

कोरलीन के बारे में विशेष रूप से कुछ खास नहीं हो सकता है। थीम्स की समीक्षा करते समय, हम केवल वर्तमान में थीम डेवलपर्स को इंगित करते हैं, क्योंकि यह जस्टिन टैडलॉक द्वारा दिया गया उदाहरण था, जिन्होंने प्रारंभिक सुरक्षा-विशिष्ट थीम समीक्षाओं में से कई किए थे। मैं ऑन्कोलॉजी को भी एक अच्छे उदाहरण के रूप में पेश करता हूं, लेकिन मैं अपने खुद के थीम को समेटने की कोशिश नहीं करना चाहता। :)
चिप बेनेट

जवाबों:


13

नॉनवेज का उपयोग करें (जब सेटिंग्स एपीआई का उपयोग नहीं कर रहे हों)

प्लगइन्स और थीम्स को सेटिंग्स एपीआई का उपयोग नहीं करने पर स्पष्ट रूप से सेटिंग्स-पेज नॉन चेकिंग प्रदान करनी चाहिए:


12

डेटा को सत्यापित, सत्यापित और बचाना

(सामने!) डेटाबेस को आगे और पीछे दोनों छोरों से अंदर और बाहर जाने वाली किसी भी चीज़ को पवित्र करें!

प्लगइन्स और थीम्स को उचित डेटा सत्यापन करना चाहिए:

  1. मान्य और स्वच्छ डेटाबेस में डेटा में प्रवेश करने से पहले सभी अविश्वसनीय डेटा
  2. सेटिंग्स फॉर्म फ़ील्ड में आउटपुट होने से पहले सभी अविश्वसनीय डेटा से बच जाएं
  3. थीम टेम्पलेट फ़ाइलों में आउटपुट होने से पहले सभी अविश्वसनीय डेटा से बच जाएं

प्लगइन्स और विषय-वस्तु का उपयोग करना चाहिए esc_attr()पाठ इनपुट के लिए और esc_html()या esc_textarea()पाठ क्षेत्रों के लिए।

इसके अलावा से उपलब्ध वर्डप्रेस एपीआई है esc_url(), esc_url_raw(), esc_js()और wp_filter_kses()

खराब उदाहरण:

<?php $url = 'javascript:pwnd()'; ?>
<a href="<?php echo $url; ?>">anchor</a>

अच्छा उदाहरण:

<a href="<?php echo esc_url($url); ?>">anchor</a>

यहां भागने के कार्यों के उपयोग के बारे में बताते हुए मार्क जैक्विथ का एक शानदार वीडियो है:


3
रास्ते में
सफाई करें

9

केवल $ _GET / $ _POST / $ _REQUEST का सावधानीपूर्वक उपयोग करें और जब बेहतर API अनुपलब्ध हो

प्लगइन्स और थीम को सीधे भरोसा करने $_POSTऔर $_REQUESTडेटा के बजाय फ़ॉर्म इनपुट डेटा प्राप्त करने और सहेजने के लिए सेटिंग्स एपीआई का उपयोग करना चाहिए ।


3
हमेशा $ _POST, $ _REQUEST और $ _GET को असुरक्षित मानें। उन सरणियों से स्वच्छता और श्वेतसूची मूल्यों को अपने स्वयं के चर में डाल दिया। उपयोगकर्ता से आने वाले मूल्यों को कभी भी साफ न करें और $ _POST में वापस डाल दें।
सुनहरीमछली

2
हमेशा जांचें कि आपको जिस कुंजी का उपयोग करने की आवश्यकता है वह उपयुक्त सरणी में सेट है। isset () आपका दोस्त है :)
mfields

9

उपयोग $wpdb->prepare

$wpdbऑब्जेक्ट के माध्यम से कस्टम क्वेरीज़ का निर्माण करते समय , हमेशा $wpdb->prepareप्लेसहोल्डर्स को SQL कोड के साथ मिश्रित डेटा के साथ क्वेरी लिखने के बजाय मानों को भरने के लिए उपयोग करें, क्योंकि mysql_*परिवार के कार्यों ने सभी को गलत तरीके से सिखाया है।


$wpdb->prepareहै नहीं तैयार बयान के रूप में ही।
हकर्रे

8

दुर्भावनापूर्ण कोड चलाने के लिए उपयोग किए जा सकने वाले PHP फ़ंक्शंस से सावधान रहें

PHP लिखने वाले किसी भी व्यक्ति के लिए एक अच्छा पढ़ा: StackOverflow पर Exploitable PHP कार्य करता है।

थीम संशोधन एपीआई का उपयोग करें

थीम्स का उपयोग करना चाहिए set_theme_mod()और संबंधित कार्यों को एक स्व आविष्कार नाम योजना नहीं।
थीम_मॉड एपीआई सेटिंग्स एपीआई के लिए एक विशेष परत है; यह अद्वितीय नामों की गारंटी देता है, सभी विकल्पों को एक सरणी में धकेलता है और मेरे अनुभव से - संभालना बहुत आसान है। साथ ही, यह प्लगइन्स के लिए मानकीकृत फिल्टर प्रदान करता है - जो इंटरऑपरेबिलिटी के लिए अच्छा है।

सक्षम से बचें register_globals

भरोसा मत करो register_globals = on। एक प्रो थीम जो मेरे अंतिम ग्राहक ने खरीदा है वह ठीक यही करता है। मैं 5 मिनट में इस विषय का उपयोग करके किसी भी साइट को हैक कर सकता हूं ...
ThimbThumb ने यह भी किया (और अभी भी करता है?)।

अनावश्यक विस्तृत पहुँच अनुमतियाँ वाली फ़ाइलें न बनाएँ

बहुत अधिक पहुँच अनुमतियों के साथ फ़ाइलें न बनाएँ।

SSL का उपयोग करें जहाँ उपलब्ध हों

ट्विटर / फेसबुक पर अपना हिस्सा इंगित करें / यदि उपलब्ध हो तो HTTPS URI के लिए कुछ भी लिंक। आपके पाठक की सुरक्षा भी महत्वपूर्ण है।


2
क्या आप set_theme_mod()विशेष रूप से, सेटिंग्स एपीआई के उपयोग के साथ इसे ठीक से संयोजित करने के लिए विस्तृत रूप से बता सकते हैं ?
चिप बेनेट

@Chip बेनेट मैंने अपने जवाब में कुछ जानकारी जोड़ी है।
FUXIA

क्या आप इस मिनी-लिस्ट को छोटे और विशिष्ट उत्तरों में तोड़ सकते हैं? छोटे विखंडू में सामुदायिक विकी का प्रबंधन करना आसान। TIA
Rarst

3
चिप: थीम मॉड सिस्टम सेटिंग्स एपीआई के साथ बहुत अच्छी तरह से एकीकृत नहीं करता है। मैं एक पोस्ट लिखता हूँ जिसमें बताया गया है कि इसे कैसे करना है कुछ समय पहले।
ओटो

7

एकल सरणी में डेटा सहेजें

प्लगइन्स और थीम्स को सेटिंग्स पेज के लिए कई विकल्प बनाने के बजाय एक ही सरणी में विकल्पों को सहेजना चाहिए। सेटिंग्स एपीआई का उपयोग यह संभालना होगा।


6

सेटिंग्स पृष्ठों को जोड़ने और आउटपुट करते समय उपयुक्त क्षमता की जांच करें

सेटिंग्स पेज को जोड़ने की क्षमता के लिए प्लगइन्स को एक उपयुक्त क्षमता (जैसे manage_options) का उपयोग करना चाहिए ।

थीम पेज को जोड़ने के लिए थीम को edit_theme_optionsउपयुक्त क्षमता के रूप में उपयोग करना चाहिए ।


1
छोटे लेकिन महत्वपूर्ण नोट: आप edit_theme_optionsसेटिंग्स एपीआई के साथ उपयोग नहीं कर सकते , हालांकि, विकल्प प्रस्तुत manage_optionsकरने के लिए अद्यतन प्रस्तुत करने के लिए आवश्यक हार्ड-कोडित है । संबंधित Trac टिकट यहां पाया जा सकता है
t31os

यह सच है, लेकिन 1) जो केवल संपादकों को प्रभावित करेगा, न कि एडमीन को; और 2) उम्मीद है कि जल्द ही संबोधित किया जाएगा, लिंक किए गए Trac टिकट के माध्यम से।
चिप बेनेट

हमेशा एक कस्टम भूमिका या एक नियमित भूमिका की संभावना होती है जिसे edit_theme_optionsकैप दिया जाता है, मैंने सोचा कि यह इंगित करना आसान हो सकता है कि वर्तमान स्थिति में सेटिंग्स एपीआई केवल manage_optionsक्षमता के साथ भूमिकाओं द्वारा उपयोग करने योग्य है ।
t31os

5

अप-टू-डेट ट्यूटोरियल और जानकारी का उपयोग करें

प्लगइन्स और थीम दोनों को विकल्प और सेटिंग्स पृष्ठों को जानबूझकर लागू करना चाहिए और कॉपी-एंड-पेस्ट वेबसाइट ट्यूटोरियल पर भरोसा नहीं करना चाहिए जो पुराने हैं और नीचे सूचीबद्ध लोगों जैसे उचित डेटा सुरक्षा शामिल नहीं है।

क्या नहीं करना है इसके उदाहरण :


1
मैंने थोड़ा सा जोर दिया पाठ को जोड़ने के लिए इंगित करने के लिए लिंक उदाहरण हैं कि क्या नहीं करना है, क्योंकि जानकारी के माध्यम से स्किम करना आसान है और उन पैराग्राफ को पढ़े बिना लिंक पर क्लिक करें जो उन्हें आगे बढ़ाते हैं। साथ ही मैंने जवाब दिया कि जब मैं वहां था, तब थोड़ा
प्रीतिकर

2
यह व्याख्या का थोड़ा उपयोग कर सकता है कि गलत और / या पुराने तरीके से बिल्कुल उदाहरण ट्यूटोरियल क्या कर रहे हैं।
रारस्ट

4

सेटिंग्स एपीआई का उपयोग करें

प्लगइन्स और थीम्स को सेटिंग्स एपीआई का उपयोग करना चाहिए, जो उपयोग करना अधिक आसान है, अधिक सुरक्षित है, और सेटिंग्स पेजों की कड़ी मेहनत का बहुत ध्यान रखता है:

सेटिंग्स एपीआई का उपयोग करने पर एक अच्छे ट्यूटोरियल के लिए, देखें:


सेटिंग्स एपीआई और थीम विकल्पों के संबंध में इस उत्तर पर मेरी टिप्पणी देखें ।
t31os

1

चेक बॉक्स का चयन करें और विकल्पों के लिए, प्लगइन्स और विषय-वस्तु का उपयोग करना चाहिए checked()और selected()outputting के लिए काम करता है checked="checked"और selected="selected", क्रमशः।


वास्तव में एक सुरक्षा चीज नहीं है, जब तक कि मैं कुछ याद नहीं कर रहा हूं। अभी भी अत्यधिक सुविधाजनक और उपयोग करने के लिए अच्छा है। :)
रार्स्ट

खैर, शायद और शायद नहीं। मैंने उसी चीज़ को पूरा करने के लिए बहुत सारे कस्टम कोड देखे हैं। अधिक कोड स्पेगेटी = सुरक्षा जोखिमों को पेश करने के अधिक अवसर। :)
चिप बेनेट

बेनेट - कुछ दिनों पहले टॉक्सो के साथ मेल करने से - मुझे लगता है कि मैं इसे हम दोनों के लिए कह सकता हूं - इसके लिए सबसे सरल कार्य उन कार्यों की तुलना में पढ़ना और समझना बहुत आसान है। मैं नीचे नहीं हूँ, लेकिन यह भी नहीं है। Imo यह कोर का हिस्सा नहीं होना चाहिए, क्योंकि यह कोई मूल्य नहीं जोड़ता है।
kaiser

2
मैं उत्सुक हूं कि आप लोग क्या लेकर आए हैं कि इससे आसान है checked( $theme_options['whatever_option'] )या नहीं checked( 'some_value' == $theme_options['whatever_option'] )। मैं नहीं जानता कि यह उससे अधिक रसीला कैसे हो जाता है?
चिप बेनेट

1

उपसर्ग समारोह और चर नाम

प्लगइन्स को प्लग-स्लग के साथ सभी विकल्पों, कस्टम फ़ंक्शंस, कस्टम चर और कस्टम स्थिरांक को उपसर्ग करना चाहिए।

थीम-स्लग के साथ थीम को सभी विकल्पों, कस्टम फ़ंक्शंस, कस्टम चर और कस्टम स्थिरांक को उपसर्ग करना चाहिए।


मैं इसे सभी वर्ग नामों के साथ-साथ पोस्ट_टाइप्स और टैक्सोनॉमी जैसी कस्टम वस्तुओं के नामों तक विस्तारित करूंगा।
mfields


0

व्यवस्थापक मेनू के उपयुक्त अनुभागों में सेटिंग्स पृष्ठ जोड़ें

प्लगइन्स को टॉप-लेवल मेन्यू को जोड़ने के बजाय मेन्यू add_options_page()सेटिंग पेज को Settingsमेन्यू में जोड़ने के लिए फंक्शन का उपयोग करना चाहिए add_menu_page()

विषय-वस्तु को टॉप-लेवल मेनू को जोड़ने के बजाय add_theme_page()थीम सेटिंग्स पेज को Appearanceमेनू में जोड़ने के लिए फ़ंक्शन का उपयोग करना चाहिए add_menu_page()

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