मुझे esc_url का उपयोग क्यों करना चाहिए?


12

यह बात मेरे कोडिंग को मुश्किल बनाती है। वर्डप्रेस कोडेक्स सुरक्षा के बारे में अस्पष्ट बात करके esc_url के उपयोग का कारण बनता है। लेकिन क्या यह वास्तव में परेशानी के लायक है?

उदाहरण के लिए, महत्वपूर्ण, व्यावहारिक सुरक्षा लाभ क्या है

<?php echo esc_url( home_url( '/' ) ); ?>

के बजाय

<?php echo home_url() ?>

पुनश्च: मैं विषय विकास के बारे में बात नहीं कर रहा हूं, लेकिन एक विशिष्ट साइट के बारे में।

जवाबों:


12

यदि आप डेटा सत्यापन पर प्रलेखन की जाँच करते हैं, तो यह फ़ंक्शन के बारे में कहना है:

URL (पाठ नोड्स, विशेषता नोड या कहीं और) में सैनिटाइज़ करते समय हमेशा esc_url का उपयोग करें। उन URL को अस्वीकार करता है, जिनमें प्रदान किए गए श्वेतसूची प्रोटोकॉल [...] में से एक नहीं है, अमान्य वर्णों को समाप्त करता है, और खतरनाक वर्णों को निकालता है।

वहां आपके पास है - व्यावहारिक सुरक्षा लाभ। मान्य प्रोटोकॉल, कोई नकली वर्ण नहीं।

आवश्यकता के बारे में जवाब दृढ़ता से हाँ है । बचने का उत्पादन सबसे बुनियादी सुरक्षा अभ्यास है।


2
सभी उचित सम्मान के साथ, मैं यह नहीं देख सकता कि उदाहरण के लिए होम लिंक कैसे सुरक्षा जोखिम पैदा कर सकता है। शायद ये दिशा-निर्देश थीम निर्माण के लिए हैं और "निजी" कोड के लिए लागू नहीं होते हैं? आखिरकार, html में घर के पते और अन्य लिंक को हार्डकोड करना सबसे अच्छा हो सकता है और अगर सुरक्षा जोखिम हैं तो php का उपयोग बिल्कुल नहीं करें?
IXN

9
यह लगातार और सार्वभौमिक रूप से सुरक्षा प्रथाओं को लागू करने के लिए बहुत अधिक उत्पादक है, बहस से अगर प्रत्येक और हर मामले के लायक है। :)
Rarst

7
दूसरी ओर कोडेक्स द्वारा सुझाया गया संसाधन नियम संख्या 3: ट्रस्ट वर्डप्रेस को स्थापित करता है । अगर यह उनके उचित संदर्भ में उपयोग किया जाता है, जैसे कि wp कोर कार्यों के निरीक्षण के खिलाफ सिफारिश करने के लिए लगता है । इस सिफारिश के अनुसार, मुझे इसके स्वयं के स्वच्छताकरण के प्रदर्शन की उम्मीद होगी । home_url()home_url
फ्रेंको

3

ठीक है, सभी उपयोगकर्ता इनपुट को सैनिटाइज़ किया जाना चाहिए ... यदि आप जिस यूआरएल को इंजेक्ट करते हैं वह उपयोगकर्ता इनपुट नहीं है (जैसे किसी व्यक्ति द्वारा पूरी तरह से विश्वास करना, हार्डकोड किए गए मानों द्वारा साइट सेटिंग) तो आप खुद को esc-url से राहत दे सकते हैं।

लेकिन अगर मैं आपकी साइट पर उस यूआरएल को इंजेक्ट कर सकता हूं, तो मैं आसानी से js कोड, या पुनर्निर्देशन कोड ... या कुछ स्थितियों में सर्वर साइड कोड भी इंजेक्ट कर सकता हूं।

इससे सत्र का अपहरण हो सकता है और आपके उपयोगकर्ता खाते चोरी और अन्य खराब विकल्प हो सकते हैं।

संपादित करें:

आपके उदाहरण में esc_url( home_url( '/' ) );
यह अर्ध-हार्डकोड मूल्य पर संचालित है! इसलिए esc_urlसमाप्त किया जा सकता है।
कहा कि मैं अभी भी नहीं देखता कि जब कोई खतरा होता है और जब नहीं होता है और आम तौर पर हर मूल्य के लिए esc_url () रखने का सुझाव देते हैं, तो बीच के अंतर को क्यों परेशान करते हैं।


3
"साइट सेटिंग जिस पर आप भरोसा करते हैं" अभी भी सचमुच उपयोगकर्ता इनपुट है। :)
Rarst

@ फिर से, मैं तुम्हारे साथ हूं, लेकिन वह esc_url का उपयोग करके इतना "घृणित" था, मुझे माफ कर दिया गया है।
तोमर डब्ल्यू

2

आपके सिर में एक और चीज होनी चाहिए esc_url(), जैसे कुछ के लिए। <a href="SANITIZE_THIS_URL">your_text</a>यदि आप अपने HTML आउटपुट में URL का उपयोग करने जा रहे हैं, जैसे किसी लिंक के लिए href विशेषता, या किसी छवि तत्व के लिए src विशेषता, तो आपको उपयोग करना चाहिए esc_url()

esc_url_raw()उन अन्य मामलों के लिए है जहाँ आप एक साफ़ URL चाहते हैं, लेकिन आप नहीं चाहते कि HTML इकाइयाँ एन्कोडेड हों। इसलिए कोई भी गैर-HTML उपयोग (DB, रीडायरेक्ट) इसका उपयोग करेगा।

esc_url_raw()समारोह काफी के रूप में ही करना होगा esc_url(), लेकिन यह डिकोड संस्थाओं नहीं होगा, जिसका अर्थ यह जगह ले और और और इतने पर # 038 के साथ नहीं होंगे। के रूप में मार्क ने कहा, यह सुरक्षित उपयोग करने के लिए esc_url_raw()डेटाबेस प्रश्नों, रीडायरेक्ट और HTTP कार्यों में, इस तरह के `के बारे में अधिक जानकारी के लिए wp_remote_get () 'के रूप में esc_url_raw ()


1

esc_url का उपयोग वैध HTML बनाने के लिए किया जाता है (इनपुट को साफ करने के लिए नहीं)। आपको इसका उपयोग कभी भी करना चाहिए जब तक कि आप यह सुनिश्चित न कर लें कि आप जो आउटपुट देना चाहते हैं, वह उस संदर्भ के लिए वैध HTML है।


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