सुरक्षा के दृष्टिकोण से, ब्लोगिनोफ़ () या गेट_ब्लोजिफ़ो () से बच जाना चाहिए?


10

मैं WP विषय और प्लगइन सुरक्षा के बारे में बहुत सारी जानकारी की समीक्षा कर रहा हूं और इस अवधारणा को समझ सकता हूं कि आपको थीम और प्लगइन्स में विशेषताओं और HTML मूल्यों से बचना चाहिए। मैंने मानक और एक या फ़ंक्शन के अंदर दोनों को देखा bloginfo()और echo get_bloginfo()उपयोग किया है।esc_html()esc_attr()

Genesis और _s , Automattic का आधार विषय दोनों ही इन मूल्यों से बचते हैं लेकिन WP के स्वयं के कोडेक्स थीम मानक गाइड इन मूल्यों से बचने के बारे में कुछ नहीं कहते हैं। मैंने WP कोड (wp-includes/option.php)में देखा हैऔर ऐसा लगता है कि वहाँ से पारित मानों का थोड़ा सा संस्कार है,get_option()लेकिन यह भी ऐसा लगता है कि एक फिल्टर है जो एक प्लगइन कुछ मूल्यों के लिए अधिलेखित कर सकता है।

यह यह तथ्य है जो मुझे यह सोचने की ओर ले जाता है कि इसे बच जाना चाहिए। क्या कोई मुझे इस पर प्रकाश डाल सकता है?

जवाबों:


15

आपके प्रश्न का उत्तर पाने के लिए हमें यहाँ थोड़ा और गहरा देखना होगा।

तो, bloginfoचारों ओर एक साधारण आवरण है get_bloginfo

<?php
function bloginfo( $show='' ) {
    echo get_bloginfo( $show, 'display' );
}

दूसरे तर्क पर ध्यान दें display। देखते हैं कि क्या करता है।

<?php
function get_bloginfo( $show = '', $filter = 'raw' ) {

    // snip snip, $output is fetched somewhere in here

    if ( 'display' == $filter ) {
        if ( $url )
            $output = apply_filters('bloginfo_url', $output, $show);
        else
            $output = apply_filters('bloginfo', $output, $show);
    }

    return $output;
}

यदि फ़िल्टर displayके आउटपुट पर सेट किया गया get_bloginfoहै तो फ़िल्टर के माध्यम से चलाया जाता है।

esc_htmlकिसी फ़ंक्शन में कॉल की तरह हार्डकोड के बजाय , WP चीजों को करने के लिए स्वयं हुक प्रणाली का उपयोग करता है। यह पता लगाने की जगह कि ऐसा कहाँ होता है wp-includes/default-filters.phpbloginfoउस फ़ाइल के लिए एक त्वरित खोज से पता चलता है ...

<?php
// Format strings for display.
foreach ( array( 'comment_author', 'term_name', 'link_name', 'link_description', 'link_notes', 'bloginfo', 'wp_title', 'widget_title' ) as $filter ) {
    add_filter( $filter, 'wptexturize'   );
    add_filter( $filter, 'convert_chars' );
    add_filter( $filter, 'esc_html'      );
}

bloginfoforeachसरणी में छिपा हुआ है । जैसा कि आप देख सकते हैं, उत्पादन के bloginfoसाथ बच गया esc_html

दूसरे शब्दों में, यह:

<?php
bloginfo('name');

इसके बराबर है:

<?php
echo esc_html(get_bloginfo('name'));

या यह:

<?php
echo get_bloginfo('name', 'display');

तो, नहीं, उत्पादन से bloginfoबचने की जरूरत नहीं है। get_bloginfoजब तक दूसरा तर्क सेट नहीं किया जाता है, तब तक इसका उत्पादन नहीं होता है display

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


संस्करण की जाँच के लायक हो सकता है फ़िल्टर का उपयोग शुरू किया गया था। यह हो सकता है कि _ और उत्पत्ति जहां एक पुराने संस्करण में प्रकाशित किया गया था जिसमें यह कोड शामिल नहीं था।
मार्क कप्लून

2
esc_htmlलगभग 2.8 के बाद से है, इसलिए इसे bloginfo github.com/WordPress/WordPress/blob/2.8-branch/wp-includes/…
chrisguitarguy

बहुत बढ़िया जवाब, धन्यवाद। मैं केवल अभी WP की चपेट में आ रहा हूं और हालांकि यह मेरे लिए स्पष्ट था कि ब्लजिनफॉ एक गेट_बग्लिनाफो रैपर था, यह स्पष्ट नहीं था कि आउटपुट को साफ किया जा रहा था। मैं फिल्टर से चूक गया। मुझे शायद अधिक परिचित होना चाहिए कि कैसे WP डेटाबेस में प्रवेश करने और छोड़ने वाले कोड को संभालता है। मैं एक समान दृष्टिकोण के साथ छोड़ रहा हूं जब मैंने शुरू किया था लेकिन कम से कम मुझे पता है कि अब क्यों :)
पॉल ग्राहम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.